分类
联系方式
  1. 新浪微博
  2. E-mail

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 功能:

  1. Native 侧预埋一个 Channel
  2. Web 侧加载 qwebchannel.js,并执行 WebChannel 调用

常用方法

网络资源

QWebEngineView Class | Qt WebEngine 5.15.7

Qt5中QWebEngineView的使用,让桌面客户端和web端友好通信 DONE

QWebEngineView使用:开启插件支持、开启文件下载支持

QWebEngineView实现HTTP请求的拦截

PyQt5系列教程(58):Web页面交互初探1