QtWebEngine
一、架构
1.1 模块
Qt WebEngine中的功能分为以下模块:
模块 | 功能 |
---|---|
Qt WebEngine Widgets C++ Classes | 提供用于在基于 QWidget 的应用程序中呈现 Web 内容的C++类。 |
Qt WebEngine QML Types | 提供 QML 类型,用于在 QML 应用程序中呈现 Web 内容。 |
Qt WebEngine Widgets C++ Classes | 提供用于在基于 QWidget 的应用程序中呈现 Web 内容的C++类。 |
1.2 小组件
这里记录的是Qt WebEngine Widgets C++ Classes
这是官方的一个自上而下的架构图片
所有页面都属于包含共享设置、脚本和 Cookie 的 Web 引擎配置文件。
1.3 类概述
类 | 功能 |
---|---|
QtWebEngineView | 提供了一个用于查看和编辑 Web 文档的小部件 |
QWebEnginePage | QWebEnginePage |
QWebEngineHistory | 表示 Web 引擎页历史记录 |
QWebEngineHistoryItem | 表示 Web 引擎页历史记录中的一个项目 |
QWebEngineProfile | 由多个页面共享的 Web 引擎配置文件 |
QWebEngineSettings | 用于存储 QWebEnginePage 使用的设置的对象 |
QWebEngineScript | 封装一个 JavaScript 程序 |
QWebEngineCertificateError | 有关证书错误的信息 |
QWebEngineClientCertificateSelection | 客户端证书选择 |
QWebEngineClientCertSelection | 类包装客户端证书选择 |
QWebEngineContextMenuData | 用于使用操作填充或扩展上下文菜单的上下文数据 |
QWebEngineDownloadItem | 有关下载的信息 |
QWebEngineFullScreenRequest | 允许接受或拒绝进入和退出全屏模式的请求 |
QWebEngineScriptCollection | 表示用户脚本的集合 |
二、类
2.1 QWebEngineView
2.1.1 例
此类用于基础的显示页面
一个常见的加载页面的例子:
QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("https://www.csdn.net/"));
view->show();
运行后即显示加载的页面
2.1.2 常用函数
*①QMenu QWebEngineView::createStandardContextMenu ()
创建标准上下文菜单并返回指向该菜单的指针。
②[virtual protected] QWebEngineView QWebEngineView::createWindow ( QWebEnginePage::WebWindowType type )*
当从QWebEnginePage 中希望创建新窗口时根据Page类返回的类型调用该函数 。
在使用QWebEngineView 加载一个页面时,我们会发现点击页面上的超链接不起作用,此时我们可以重写createWindow函数来使其跳转:
QWebEngineView* QWebEngineViewChw::createWindow(QWebEnginePage::WebWindowType type)
{
//加载链接地址
if (!m_url.isEmpty())
{
this->load(m_url);
}
return nullptr;
}
更细致一些,我们需要根据type的类型来操作
switch (type) {
case QWebEnginePage::WebBrowserTab: {
//TODO
}
case QWebEnginePage::WebBrowserBackgroundTab: {
//TODO
}
case QWebEnginePage::WebBrowserWindow: {
//TODO
}
case QWebEnginePage::WebDialog: {
//TODO
}
③void QWebEngineView:: findText (const QString & subString , QWebEnginePage::FindFlags options = {}, const std::function < void (const QWebEngineFindTextResult &)> & resultCallback = …)
查找指定字符串。要清除选定,只需传递空字符串。
可用于实现按下“Ctrl+F”来查找输入的字符串
*④[static, since 6.2] QWebEngineView QWebEngineView:: forPage (const QWebEnginePage * page )
返回与page有关联的视图
该函数在 Qt 6.2 引入。
*⑤QWebEngineHistory QWebEngineView:: history () const
返回指向导航网页的视图历史的指针。
相当于:
view->page()->history();
⑥void QWebEngineView:: load (const QUrl & url )
加载指定 url 并显示它。
注意:直到达成足够数据才显示新 URL。在使用时可能会遇页面一直白屏,等待一段时间后突然加载出来的现象。
使用该函数可以直接加载指定的url,通常会配合UrlChange()信号使用。鼠标点击超链接->发送UrlChange信号->槽函数调用load加载UrlChange()传递的Url。
⑦[since 5.9] void QWebEngineView:: load (const QWebEngineHttpRequest & request )
发出指定 request 并加载响应。
该函数在 Qt 5.9 引入。
⑧QUrl Url()const
返回当前加载的url
⑨void setUrl (const QUrl & url )
加载 URL。
*⑩QWebEnginePage QWebEngineView:: page () const
返回指向底层 Web 页面的指针。
*⑩① QAction QWebEngineView:: pageAction ( QWebEnginePage::WebAction action ) const
返回指针指向 QAction 封装指定的 Web 动作 action .
⑩②[since 6.2] void QWebEngineView:: print ( QPrinter * printer )
将页面的当前内容呈现为临时 PDF 文档,然后使用打印机 进行打印。
用于创建和打印PDF文档的设置将从打印机 对象中检索。
完成后将发送printFinished ()信号 ,成功或失败将返回:true/falsex需要保证在发送rintFinished () 前打印机都是可用的。
注意: 打印在浏览器进程上运行,默认情况下,该进程未进行沙盒处理。
注意: 此函数渲染到打印机时有栅格化的效果,请将打印机的默认分辨率提高到至少 300 DPI 或使用 printToPdf () 更有效地生成 PDF 文件输出。
该函数在 Qt 6.2 引入。
⑩③[since 6.2] void QWebEngineView:: printToPdf (const QString & filePath , const QPageLayout & layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()), const QPageRanges & ranges = {})
将页面的当前内容呈现为 PDF 文档,并将其保存在 filePath 中指定的位置。生成的PDF文档的页面大小和方向取自布局 中指定的值,而打印的页面范围取自范围,默认为打印所有页面。
此方法发出将网页打印为 PDF 的异步请求,并立即返回。要获得有关请求结果的通知,请连接到信号 pdf打印已完成 ()。
如果提供的文件路径中已存在某个文件,则该文件将被覆盖。
该函数在 Qt 6.2 引入。
⑩④[since 6.2] void QWebEngineView::printToPdf (const std::function < void (const QByteArray &)> & resultCallback , const QPageLayout & layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()), const QPageRanges & ranges = {})
将页面的当前内容呈现为 PDF 文档,并返回一个包含 PDF 数据的字节数组作为 resultCallback 的参数。生成的PDF文档的页面大小和方向取自布局 中指定的值,而打印的页面范围取自范围,默认为打印所有页面。
resultCallback 必须将对 QByteArray 的 const 引用作为参数。如果打印成功,则此字节数组将包含 PDF 数据,否则,该字节数组将为空。
警告: 我们保证回调 ( resultCallback ) 总是被调用,但它可能在页面销毁期间完成。当 QWebEnginePage 被删除,会采用无效值触发回调
该函数在 Qt 6.2 引入
⑩⑤void QWebEngineView:: setContent (const QByteArray & data , const QString & mimeType = QString(), const QUrl & baseUrl = QUrl())
把 Web 视图内容设为 data 。若 mimeType 自变量为空,默认内容为 . text/plain,charset=US-ASCII
内容中引用的外部对象的定位相对于 baseUrl 。对于要加载外部对象, 不可以为空。 baseUrl
数据被立即加载;外部对象被异步加载。
⑩⑥void QWebEngineView:: setHtml (const QString & html , const QUrl & baseUrl = QUrl())
将 Web 视图内容设为指定 html 内容。
外部对象 (譬如:HTML 文档引用的样式表或图像) 的定位相对于 baseUrl 。对于要加载外部对象, 不可以为空。例如,若 html 检索自 ,其是基 URL,然后相对 URL 引用图像, 例如 : baseUrl http://www.example.com/documents/overview.html diagram.png http://www.example.com/documents/diagram.png
HTML 文档立即加载,而外部对象异步加载。
当使用此方法时,Qt WebEngine 假定外部资源 (譬如 JavaScript 程序或样式表) 是以 UTF-8 编码的,除非另有指定。例如,可以指定外部脚本的编码透过 属性在 HTML 脚本标签。另外,可以通过 Web 服务器指定编码。 charset
此方便函数相当于 . setContent(html, "text/html;charset=UTF-8"
, baseUrl)
警告: 此函数只适用于 HTML。对于其它 MIME 类型 (譬如 XHTML 或 SVG), setContent () 应该使用以取而代之。
注意: 大于 2 MB 的内容无法显示,因为 setHtml() 将转换提供的 HTML 为百分比编码并放置 :在它之前创建导航 URL。由此,提供的代码变为超过 Chromium 设置的 2 MB 限制的 URL。若内容太大, loadFinished () 信号被触发采用 . data success=false
To Be Continue……