Qt文档阅读笔记-QWebEngineView及QML WebEngineView
這里主要是最近有給Java Web項目及Qt項目需要混合,自己搞的QtWebEngine沒有問題,而用了項目里面的,就有問題,在此閱讀下官方資料,看看能不能解決這樣莫名其妙的問題,在此記錄下本次的閱讀筆記:
?
QWebEngineView
QWebEngineView提供了widget去查看和編輯web網頁。
使用load()函數去加載一個web頁面,這里會調用GET方法。
使用show函數,展示這個頁面。
QWebEngineView *view = new QWebEngineView(parent); view->load(QUrl("http://qt-project.org/")); view->show();如果訪問站點,使用setUrl(),如果加載本地html文件使用setHtml()。
當某給網頁被加載的時候loadStarted()信號將會觸發。當某個元素完成加載時會觸發loadProgress()信號,如圖片或者腳本。當加載完成時會觸發loadFinished()信號,此信號帶有給參數,當為true時說明頁面加載完成,當為false時說明相反。
?
page()函數返回web頁面對象的指針。QWebEngineView中包含了QWebEnginePage,并且QWebEnginePage會加載到QWebEngineHistory的上下文中。
?
HTML中的title會被設置到title()屬性中。Icon()保存其圖標或者在iconUrl()中存儲其icon的url鏈接。當這些數據變化時,titileChanged()、iconChanged()、iconUrlChanged()信號將會被觸發。ZoomFactor()屬性將存儲網頁內容的放大和縮小。
?
如果需要自定義上下文菜單,需要繼承contextMenuEvent(),這里可以在pageAction()中設置QMenu,選中文字,復制粘貼等功能都可以通過這個方式進行實現。使用triggerPageAction()進行觸發。
?
這里可以繼承QWebEngineView重寫createWindows()函數,實現點擊后彈出web窗口的功能。
?
這里,個人提供一個簡單的例子,可以跑起來
profile
QT += core gui webenginewidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = WebEngineTest TEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSSOURCES += main.cpp\Widget.cppHEADERS += Widget.hFORMS += Widget.uimain.cpp
#include "Widget.h" #include <QApplication> #include <QWebEngineView>int main(int argc, char *argv[]) {QApplication a(argc, argv);//Widget w;//w.show();QWebEngineView view;view.load(QUrl("http://it1995.cn"));view.show();return a.exec(); }運行截圖如下:
源碼打包下載地址:
https://github.com/fengfanchen/Qt/tree/master/WebEngineTest
?
下面是QML中如何去用
?
WebEngineView QML Type
WebEngineView可以在QML應用程序中的某個區域渲染出一個動態的web網站。
?
初始化Web Engine
在main函數中調用QtWebEngine::initialize()初始化WebEngine,如下代碼:
int main(int argc, char *argv[]){QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv);QtWebEngine::initialize();QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));return app.exec();}在WebEngineView中,通過url屬性,或loadHtml方法,這里是通過GET方法進行調用,如下代碼:
import QtQuick 2.0import QtQuick.Window 2.0import QtWebEngine 1.0Window {width: 1024height: 750visible: trueWebEngineView {anchors.fill: parenturl: "http://www.qt.io"}}loadingChanged()信號將會在頁面開始、結束、失敗時觸發。
title屬性中存儲網頁標題,icon屬性存儲網頁圖標,同樣zoomFactor屬性存儲其放縮。
?
certicateError()和WebEngineCertificateError會為錯誤相關的信號。
?
newViewRequested()信號當有新的頁面獨立打卡時觸發。NewViewDestionation屬性存儲那個url將會被打卡。
?
findText()為在網頁上搜索字符串。
setActiveFocusOnPress()為聚焦網頁上的某個元素。
linkHovered()信號是在用戶把鼠標移動到鏈接上的時候就會被觸發。
?
UserScripts屬性存儲用戶的腳本,這個腳本會注入到WebEngineScript中。可以使用runJavaScript()方法進行調用。
?
Web engine view可以獨立的加載不同的配置文件
?
下面是使用WebEngineView的一個小例子
源碼如下:
profile
TEMPLATE = appQT += qml quick webengine CONFIG += c++11SOURCES += main.cppRESOURCES += qml.qrcQML_IMPORT_PATH =QML_DESIGNER_IMPORT_PATH =DEFINES += QT_DEPRECATED_WARNINGSqnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += targetmain.cpp
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtWebEngine>int main(int argc, char *argv[]) {QGuiApplication app(argc, argv);QtWebEngine::initialize();QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));return app.exec(); }main.qml
import QtQuick 2.5 import QtQuick.Window 2.2 import QtWebEngine 1.0Window {width: 1024height: 750visible: trueWebEngineView {anchors.fill: parenturl: "http:/it1995.cn"} }程序運行截圖如下:
源碼打包下載地址:
https://github.com/fengfanchen/Qt/tree/master/QMLWebEngineTest
總結
以上是生活随笔為你收集整理的Qt文档阅读笔记-QWebEngineView及QML WebEngineView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt文档阅读笔记-QtConcurren
- 下一篇: Android逆向笔记-Proguard