1. QWebView信号:
QWebView继承了QWidget的4个事件和QObject的2个事件。
| void | iconChanged() |
| void | linkClicked(const QUrl & url) |
| void | loadFinished(bool ok) |
| void | loadProgress(int progress) |
| void | loadStarted() |
| void | selectionChanged() |
| void | statusBarMessage(const QString & text) |
| void | titleChanged(const QString & title) |
| void | urlChanged(const QUrl & url) |
2. QWebPage信号:
QWebPage继承了QObject的2个事件
| void | applicationCacheQuotaExceeded(QWebSecurityOrigin * origin, quint64 defaultOriginQuota, quint64 totalSpaceNeeded) |
| void | contentsChanged() |
| void | databaseQuotaExceeded(QWebFrame * frame, QString databaseName) |
| void | downloadRequested(const QNetworkRequest & request) |
| void | featurePermissionRequestCanceled(QWebFrame * frame, QWebPage::Feature feature) |
| void | featurePermissionRequested(QWebFrame * frame, QWebPage::Feature feature) |
| void | frameCreated(QWebFrame * frame) |
| void | geometryChangeRequested(const QRect & geom) |
| void | linkClicked(const QUrl & url) |
| void | linkHovered(const QString & link, const QString & title, const QString & textContent) |
| void | loadFinished(bool ok) |
| void | loadProgress(int progress) |
| void | loadStarted() |
| void | menuBarVisibilityChangeRequested(bool visible) |
| void | microFocusChanged() |
| void | printRequested(QWebFrame * frame) |
| void | repaintRequested(const QRect & dirtyRect) |
| void | restoreFrameStateRequested(QWebFrame * frame) |
| void | saveFrameStateRequested(QWebFrame * frame, QWebHistoryItem * item) |
| void | scrollRequested(int dx, int dy, const QRect & rectToScroll) |
| void | selectionChanged() |
| void | statusBarMessage(const QString & text) |
| void | statusBarVisibilityChangeRequested(bool visible) |
| void | toolBarVisibilityChangeRequested(bool visible) |
| void | unsupportedContent(QNetworkReply * reply) |
| void | viewportChangeRequested() |
| void | windowCloseRequested() |
3. QWebFrame信号:
QWebFrame继承了QObject的2个事件
| void | contentsSizeChanged(const QSize & size) |
| void | iconChanged() |
| void | initialLayoutCompleted() |
| void | javaScriptWindowObjectCleared() |
| void | loadFinished(bool ok) |
| void | loadStarted() |
| void | pageChanged() |
| void | titleChanged(const QString & title) |
| void | urlChanged(const QUrl & url) |
4. 注册QT交互对象的时机
为了与HTML交互,我们需要调用
webView->page()->mainFrame()->addToJavaScriptWindowObject("Evnitem", envSce);
向DOM中注入一个交互对象。这个对象的加入时机需要把握。可通过对javaScriptWindowObjectCleared()信号进行处理,调用上面方法加入对象。javaScriptWindowObjectCleared()信号的解释如下:
This signal is emitted whenever the global window object of the JavaScript environment is cleared, e.g., before starting a new load.
If you intend to add QObjects to a QWebFrame using addToJavaScriptWindowObject(), you should add them in a slot connected to this signal. This ensures that your objects remain accessible when loading new URLs.
其方法是
(1)声明一个slot函数
private slots: void populateJavaScriptWindowObject();
并实现这个函数
void MainWindow::populateJavaScriptWindowObject() { webView->page()->mainFrame()->addToJavaScriptWindowObject("Evnitem", envSce); }
(2)将信号与槽连接
connect(webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),this, SLOT(populateJavaScriptWindowObject()));