Иногда при работе с QWebView, требуется встроить возможность обрабатывать сообщения(Event’ы) непосредственно от JavaScipt’ов. При этом в качестве отправителя сообщения могут выступать кнопки, либо другие элементы.
Так как же реагировать на события от JavaScript?
Следующий пример, покажет как обработать event в QWebView от кнопки.
Нам потребуется непосредственно сам класс обработчик:
#ifndef JAVASCIPT_H
#define JAVASCIPT_H
#include <QObject>
class CJavaScipt : public QObject
{
Q_OBJECT
public:
explicit CJavaScipt(QObject *parent = 0);
~CJavaScipt();
static CJavaScipt * GetInstance();
signals:
public slots:
/* Метод который будет получать управление, когда мы будем нажимать на кнопку в QWebView */
void OnButtonFileSaveClick(QString szSrcStr);
};
#endif // JAVASCIPT_H
Реализация..
CJavaScipt * CJavaScipt::GetInstance()
{
static CJavaScipt JavaScipt;
return &JavaScipt;
}
void CJavaScipt::OnButtonFileSaveClick(QString szSrcStr)
{
qDebug() << "Called! Event!" << szSrcStr.toStdString().c_str();
}
Теперь нам надо вызвать метод QWebView, чтобы зарегистрировать нашь обработчик:
Я Переопределил класс QWebView, и написал метод
void CWebView::AttachJavaSctipt()
{
page()->mainFrame()->addToJavaScriptWindowObject(QString("api"), CJavaScipt::GetInstance());
}
Как можно видеть при вызове метода класса, нам необходимо передать в качестве аргументов, название объекта JavaSctipt и сам объект который будет обрабатывать непосредственно event'ы. Более подробнее об addToJavaScriptWindowObject методе можно почитать в оф.документации. см.сылки.
Теперь непосредственно код который следует встроить в веб страницу.
QString szMessage = "<button type=\"button\" onclick="api.OnButtonFileSaveClick('Передаем строку от кнопки')\"> </button>”;
Все! Теперь мы можем обрабатывать сообщения непосредственно через JavaScript - функционал.
Скриншот использования.
:
ссылки : http://doc.qt.io/qt-4.8/qwebframe.html#addToJavaScriptWindowObject
Комментариев нет:
Отправить комментарий