目錄
- 1、QtWebEngine相比于QtWebKit的優勢
- 2、項目配置
- 2.1 確認 Qt 版本
- 2.2 在.pro 文件中添加依賴
- 3、顯示網頁
- 4、實現Qt和網頁JavaScript之間的交互
- 4.1 Qt執行網頁的JavaScript代碼
- 4.2 JavaScript調用Qt對象的函數
??QtWebEngine 是 Qt 框架中用于在應用程序中嵌入 Web 內容的模塊,它基于 Chromium 開源項目。從 Qt 5.6 開始,QtWebKit 被棄用,改用 QtWebEngine。
1、QtWebEngine相比于QtWebKit的優勢
- 現代渲染引擎:
- QtWebEngine:基于 Chromium 開源項目,采用 Blink 渲染引擎。Blink 是一個現代且高性能的渲染引擎,廣泛應用于 Chrome 等主流瀏覽器中。它在渲染速度、頁面布局準確性以及對最新 Web 標準(如 HTML5、CSS3 和 JavaScript 新特性)的支持上表現出色。這使得使用 QtWebEngine 的應用程序能夠快速、準確地呈現復雜的網頁內容,為用戶提供流暢的瀏覽體驗。
- QtWebKit:使用的 WebKit 渲染引擎在發展過程中逐漸落后于 Blink。隨著 Web 技術的快速發展,WebKit 在處理一些新的 Web 標準和復雜頁面時,性能和兼容性方面的問題逐漸顯現。
- 多進程架構:
- QtWebEngine:得益于 Chromium 的多進程架構設計。這種架構將網頁的不同部分(如渲染進程、插件進程等)分離到不同的進程中運行。這樣一來,如果某個網頁內容(如一個有問題的 JavaScript 腳本或插件)出現崩潰,不會影響整個應用程序的穩定性,只會終止相關的進程,而應用程序的其他部分仍可正常運行。同時,多進程架構還能更好地利用多核 CPU 的性能,提升整體渲染和處理效率。
- QtWebKit:通常采用單進程架構,一旦網頁內容出現錯誤,很可能導致整個應用程序崩潰,穩定性較差。而且單進程架構在資源利用和性能提升方面存在一定局限。
- 安全沙箱機制:
- QtWebEngine:繼承了 Chromium 的安全沙箱機制。沙箱對網頁內容的運行環境進行嚴格限制,阻止網頁代碼對本地系統資源進行非法訪問,如訪問敏感文件、執行惡意腳本等。這種機制大大增強了應用程序的安全性,降低了因網頁內容導致的安全威脅。
- QtWebKit:雖然也有一定的安全措施,但相比之下,其沙箱機制不夠完善,在防止網頁內容對本地系統的潛在攻擊方面,不如 QtWebEngine 有效。
2、項目配置
2.1 確認 Qt 版本
??QtWebEngine 從 Qt 5.6 開始成為 Qt 的一部分。確保你使用的 Qt 版本支持該模塊。并確認在安裝 Qt 時安裝了 QtWebEngine 模塊,可以通過 Qt 的 MaintenanceTool.exe 工具查看是否安裝。
2.2 在.pro 文件中添加依賴
??在你的 Qt 項目的 .pro 文件中添加 QT += webenginewidgets webchannel。
3、顯示網頁
??QtWebEngine 模塊的 QWebEngineView 相當于 QtWebKit 模塊的 QWebView,在函數接口上類似。
-
使用 QWebEngineView 的 load 函數加載網頁或html文件。如下所示:
#include <QApplication> #include <QWebEngineView>int main(int argc, char *argv[]) {QApplication a(argc, argv);QWebEngineView view;view.load(QUrl("http://www.example.com"));view.show();return a.exec(); }
-
使用 QWebEngineView 的 setHtml 函數可以直接加載顯示 html 文本,一般用于簡單顯示 html 超文件。示例如下:
#include <QApplication> #include <QWebEngineView>int main(int argc, char *argv[]) {QApplication a(argc, argv);QWebEngineView view;QString html = "<html><body><h1>Hello, QtWebEngine!</h1></body></html>";view.setHtml(</