QWebEngineView
介绍
QWebEngineView 提供了一个 WebView 组件,用于浏览和编辑网页。是 Qt WebEngine 模块的核心组件。
通过 load 方法可以加载网页。加载 URL 时,会发出 GET 请求。
信号
信号 | 作用 | 备注 |
---|---|---|
void loadStarted(); | 页面开始加载 | |
void loadProgress(int progress); | 页面加载进度 | |
void loadFinished(bool ok); | 页面加载结束 | ok 表示加载是否成功 |
void iconChanged(const QIcon &icon); | 网页图标变化 | |
void iconUrlChanged(const QUrl &url); | 网页图标URL变化 | |
void selectionChanged(); | 选中内容发生变化 | |
void titleChanged(const QString &title); | 标题发生变化 | |
void urlChanged(const QUrl &url); | URL发生变化 | |
fullScreenRequested | 请求全屏 |
API
方法 | 作用 | 说明 | 备注 |
---|---|---|---|
setUrl | 设置 URL | 需传入 QUrl | |
url | 获取当前 URL | 获取 URL 字符串:url().toString() | |
title | 获取当前标题 | ||
back | 后退 | ||
forward | 前进 | ||
reload | 刷新 | ||
stop | 停止加载 | ||
setHtml | 设置 HTML 网页内容 | ||
page | 获取当前页面 | 类型是 QWebEnginePage | |
load | 加载 URL |
load 加载网页
C++ 实现:
QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("http://qt-project.org/"));
view->show();
Python 实现:
view = QWebEngineView(self)
view.load(QUrl("http://qt-project.org/"))
view.show()
或者,setUrl()可用于加载网站。如果您有可用的HTML内容,则可以使用setHtml()。
其中:
- 在视图开始加载时发出loadStarted()信号
- 并且只要Web视图的元素完成加载(例如嵌入的图像或脚本),就会发出loadProgress()信号
- 完全加载视图时会发出loadFinished()信号。它的参数,是True还是Flase,表明加载是成功还是失败。
setHtml 加载 HTML 内容
Python 实现:
view.setHtml("<html><body><p>hello world.</p></body></html>")
page 获取页面信息
page()函数返回指向网页对象(QWebEnginePage)的指针。 QWebEngineView包含一个QWebEnginePage,它允许访问页面上下文中的QWebEngineHistory。
title 获取网页标题
title() 方法。
如果标题变化,通过 titleChanged() 信号通知。
icon 获取网页图标
icon() 方法。
iconUrl() 获取图标路径。
如果图标变化,通过 iconChanged()、iconUrlChanged() 信号发出。
监听网页加载完成
class Window(QWidget):
def __init__(self):
# ...
self.browser = QWebEngineView()
self.browser.loadFinished.connect(self.load_finished)
def load_finished(self):
QMessageBox.information(self, "Information", "网页加载完成了!")
html 获取网页
def callback_function(html):
print(html)
def on_load_finished():
web.page().runJavaScript("document.documentElement.outerHTML", callback_function)
createWindow 弹出窗口支持
允许用户打开新窗口,需要继承 QWebEngineView 并覆写 createWindow 方法。
JavaScript 交互
runJavaScript 执行 JavaScript
执行 JavaScript 并接收回调结果:
webView->page()->runJavaScript(jsStr, [&](const QVariant &v)
{
QString retStr = v.toString();
});
Web 反向通知 Qt
使用 QWebChannel 功能:
- Native 侧预埋一个 Channel
- Web 侧加载 qwebchannel.js,并执行 WebChannel 调用
常用方法
网络资源
QWebEngineView Class | Qt WebEngine 5.15.7
Qt5中QWebEngineView的使用,让桌面客户端和web端友好通信 DONE
QWebEngineView使用:开启插件支持、开启文件下载支持