一.直接跳转打开网页
1.使用QDesktopServices::openUrl调用系统浏览器
原理:直接调用操作系统默认浏览器打开指定URL,不在应用程序内嵌入网页。
优点:
实现简单,无需额外模块或依赖。
适用于仅需跳转外部浏览器的场景。
缺点:
无法在应用内显示网页内容。
依赖用户系统默认浏览器的兼容性。
代码示例:
QDesktopServices::openUrl(QUrl("https://www.example.com"));
二.在应用页面内显示网页内容
1.基于QtWebkit(适用于Qt 5.6之前版本)
原理:通过QWebView组件嵌入Web页面,依赖WebKit渲染引擎。
优点:
支持完整的HTML、CSS和JavaScript渲染。
提供与JavaScript的双向交互(如evaluateJavaScript和addToJavaScriptWindowObject)48。
缺点:
Qt 5.6及以上版本已移除该模块,仅适用于旧项目维护。
代码示例:
QWebView *view = new QWebView;
view->load(QUrl("https://www.example.com"));
view->show();
2.基于QtWebEngine(适用于Qt 5.6+的MSVC编译环境)
原理:基于Chromium引擎,提供QWebEngineView组件,功能更现代。
优点:
支持最新的Web标准(HTML5、CSS3、WebSocket等)。
提供QWebChannel实现C++与JavaScript的高效双向通信。
支持开发者工具调试(通过QTWEBENGINE_REMOTE_DEBUGGING环境变量)。
缺点:
仅支持MSVC编译器,MinGW环境无法使用。
依赖Chromium,导致应用体积较大(约增加数十MB)。
代码示例:
QWebEngineView *view = new QWebEngineView;
view->load(QUrl("https://www.example.com"));
view->show();
3.基于QAxWidget(适用于Qt 5.6+的MinGW编译环境)
原理:调用系统ActiveX控件(如IE的WebBrowser控件)显示网页。
优点:
在MinGW环境中替代QtWebEngine。
支持依赖ActiveX的页面(如Silverlight)。
缺点:
依赖系统IE组件,兼容性受限于Windows版本。
功能受限(如不支持现代JavaScript特性)。
需手动配置ActiveX控件UUID和属性。
代码示例:
QAxWidget *webWidget = new QAxWidget;
webWidget->setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}"); // IE控件UUID
webWidget->dynamicCall("Navigate(const QString&)", "https://www.example.com");
webWidget->show();
三.获取网页数据
1.基于QNetworkAccessManager(仅获取网页内容)
原理:通过HTTP请求获取网页内容,但不渲染页面。
优点:
轻量级,适合仅需获取网页数据的场景。
支持自定义HTTP请求和响应处理10。
缺点:
无法显示网页界面,仅用于数据交互。
代码示例:
QNetworkAccessManager *manager = new QNetworkAccessManager;
manager->get(QNetworkRequest(QUrl("http://www.example.com")));
四.对比 表格

五.选择建议
1. 桌面应用(MSVC环境):
优先使用QtWebEngine,功能全面且支持最新Web标准。
2. MinGW环境或需兼容旧技术:
选择QAxWidget,但需注意IE兼容性,其网页渲染功能没有QtWebEngine强大,比如复杂公式的显示。
3. 旧项目维护:
沿用QtWebkit(需锁定Qt版本,QT5.6版本以后不支持)。
4. 轻量级需求:
若仅需打开外部浏览器,使用QDesktopServices;若需获取数据,使用QNetworkAccessManager。