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);
emit QEvent::ChildPolished;
}
return nullptr;
}
更细致一些,我们需要根据type的类型来操作
switch (type) {
case QWebEnginePage::WebBrowserTab: {
}
case QWebEnginePage::WebBrowserBackgroundTab: {
}
case QWebEnginePage::WebBrowserWindow: {
}
case QWebEnginePage::WebDialog: {
}
③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……
|