QT之QWebEngineView详细介绍

2024-06-04 3346阅读

此篇文章来源于自己学习QT的QWebEngineView类总结的知识点,本人能力有限,若文章有其他错误,大家评论区评论,共同学习,共同进步。

一、QWebEngineView介绍

QWebEngineView是Qt框架中的一个组件,它是基于Chromium内核的Web浏览器引擎,用于在Qt应用程序中嵌入网页内容和实现各种Web应用功能。通过QWebEngineView,开发者可以在本地桌面应用程序中轻松地集成网页浏览功能,支持HTML5、CSS3、JavaScript等现代Web技术。

注意:QWebEngineView类仅支持QT的5.4版本以上,之前的版本都是使用QtWebKit,QtWebKit类在5.4版本以上已经被丢弃了,不能使用了。而对于QWebEngineView类,仅仅支持MSVC的编译器并不支持MinGW。

  1. 加载并显示网页内容。
  2. 与网页中的JavaScript进行交互。
  3. 监听和处理网页加载完成、加载失败等各种信号槽事件。
  4. 实现网页导航控制(前进、后退、刷新)等功能。

在Qt Quick中,对应的功能类为QQuickWebEngineView,用于在QML场景中嵌入Web内容。

例如,创建并加载一个网页的基本用法如下:

#include 
#include 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWebEngineView view;
    view.load(QUrl(QStringLiteral("http://www.example.com")));
    view.show();
    return app.exec();
}

以上代码会创建一个QWebEngineView窗口,并加载example.com网站的内容。

二、成员函数

1、QWebEngineView::QWebEngineView(QWidget *parent = Q_NULLPTR)

QWebEngineView::QWebEngineView(QWidget *parent = Q_NULLPTR) 是Qt WebEngine模块中用于创建一个QWebEngineView对象的构造函数。

参数 parent 指向一个QWidget指针,它是QWebEngineView的父窗口或父控件。如果不传入参数(使用默认值Q_NULLPTR),则QWebEngineView将成为一个顶级窗口。如果指定了父控件,那么QWebEngineView将作为该父控件的子控件存在,并遵循父控件的生命周期和布局规则。

简而言之,这段代码:

QWebEngineView *webView = new QWebEngineView(parentWidget);

将会创建一个新的QWebEngineView实例,并将其父控件设置为parentWidget。如果需要在窗口中显示一个能够浏览网页内容的视图,这就是创建该视图的基本步骤。随后可以调用webView->load(QUrl(url))来加载指定的网页URL。

2、void QWebEngineView::back()

void QWebEngineView::back() 是Qt WebEngine模块中的一个成员函数,应用于QWebEngineView类。该函数的作用是让QWebEngineView中的网页浏览器历史回退一步,即显示上一个访问过的网页。

在实际应用中,如果你有一个QWebEngineView对象(比如命名为webView),并且用户已经在该浏览器控件中浏览了几个网页,调用 webView->back(); 就会让浏览器返回到前一个页面,就像在常规Web浏览器中点击“后退”按钮一样。

以下是一个使用QWebEngineView和back()函数的简单代码示例:

#include 
#include 
#include 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // 创建一个QWebEngineView实例
    QWebEngineView* webView = new QWebEngineView();
    // 加载一个网页
    webView->load(QUrl("https://www.example.com"));
    // 显示QWebEngineView
    webView->show();
    // 假设用户已经浏览了一些页面,现在模拟点击“后退”按钮
    if (webView->history()->canGoBack()) {
        webView->back(); // 回退到上一个页面
    }
    return app.exec();
}

在这个例子中,首先创建了一个QWebEngineView实例,并加载了一个网页。然后,检查webView的历史记录中是否可以回退(即是否至少有两个页面),如果可以,则调用back()函数来实现页面回退的功能。在实际应用中,通常会将back()函数的调用绑定到一个按钮的点击事件上,以供用户手动触发页面回退行为。

3、void QWebEngineView::forward()

void QWebEngineView::forward() 是Qt WebEngine模块中的一个成员函数,用于QWebEngineView类。这个函数的作用是在网页浏览历史中向前推进一步,即显示下一个访问过的网页。

在实际应用中,如果你有一个QWebEngineView对象(例如 webView),并且用户已经在该浏览器控件中浏览了若干网页,并且当前处于历史记录的前一个页面,调用 webView->forward(); 就会让浏览器跳转到下一个页面,就如同在常规Web浏览器中点击“前进”按钮一样。

下面是一个使用forward()函数的基本示例:

#include 
#include 
#include 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // 创建一个QWebEngineView实例
    QWebEngineView* webView = new QWebEngineView();
    // 加载一个初始网页
    webView->load(QUrl("https://www.example.com"));
    // 用户浏览了其他页面,现在假设已经按后退按钮回到了之前的页面
    if (webView->history()->canGoForward()) { // 检查是否可以前进到下一个页面
        webView->back(); // 先模拟后退一步
        webView->forward(); // 然后模拟前进到下一个页面
    }
    // 显示QWebEngineView
    webView->show();
    return app.exec();
}

在这个示例中,我们首先加载了一个网页,然后假设用户进行了后退操作,并检查是否可以前进。如果可以,我们就调用forward()函数,让浏览器显示下一个页面。在真实应用中,通常会将forward()函数绑定到一个“前进”按钮的点击事件上。

4、void QWebEngineView::iconChanged(const QIcon &icon)

void QWebEngineView::iconChanged(const QIcon &icon) 是Qt WebEngine模块中QWebEngineView类的一个信号。当加载的网页图标(favicon)发生变化时,这个信号会被发射。

这个信号并没有一个对应的成员函数,而是作为一种通知机制,允许您连接到一个槽函数来响应网页图标的变化。例如,当您希望在地址栏或者书签中更新网页对应的图标时,可以这样做:

QObject::connect(webView, &QWebEngineView::iconChanged, [=](const QIcon &newIcon){
    // 更新地址栏或书签栏中的图标
    addressBar->setIcon(newIcon);
    bookmarksManager->updateBookmarkIcon(currentUrl, newIcon);
});
// 或者在槽函数中处理
connect(webView, SIGNAL(iconChanged(QIcon)), this, SLOT(updatePageIcon(QIcon)));
//槽函数
void YourClass::updatePageIcon(const QIcon &icon) {
    // 在这里处理图标变化,例如更新UI中的图标
    myStatusIcon->setIcon(icon);
}

请注意,上面的代码展示了Qt 5中的信号与槽连接方式,对于Qt 5.14及以后的版本,推荐使用lambda表达式或connect函数的第一个形式来连接信号和槽。在Qt 4风格的信号槽语法中,使用SIGNAL和SLOT宏。

5、void QWebEngineView::iconUrlChanged(const QUrl &url)

void QWebEngineView::iconUrlChanged(const QUrl &url) 是Qt WebEngine模块中QWebEngineView类的一个信号。当网页的图标URL(favicon URL)发生变化时,该信号会被发射。这个信号携带了一个QUrl类型的参数,该参数包含了新的图标资源的URL。

这个信号常用于监控网页favicon的更新,当网页的图标URL变化时,您可以连接到这个信号,并根据新的URL获取和更新对应的图标资源。

例如,通过信号槽机制,您可以捕获这个信号并做出相应动作:

QObject::connect(webView, &QWebEngineView::iconUrlChanged, [&](const QUrl &newIconUrl){
    // 新的图标URL已改变,可以在此处根据新的URL下载并更新图标
    // 下面的代码仅为示意,实际应用中可能需要异步下载并处理图标数据
    QImage iconImage = QImageReader(newIconUrl).read();
    if (!iconImage.isNull()) {
        myStatusBar->setIcon(QIcon(iconImage));
    }
});

void QWebEngineView::iconChanged(const QIcon &icon) 和 void QWebEngineView::iconUrlChanged(const QUrl &url) 是Qt WebEngine模块中QWebEngineView类的两个不同信号,它们的区别在于提供的信息和处理方式:

  1. iconChanged(const QIcon &icon):

    • 这个信号是在网页的图标(favicon)实际内容发生变化时触发的。
    • 当网页的favicon加载完成或更新时,该信号会直接传递一个已经解析并加载好的图标对象(QIcon)。
    • 开发者可以直接使用这个图标对象更新UI,无需关心具体的URL和加载过程。
  2. iconUrlChanged(const QUrl &url):

    • 这个信号在网页的favicon URL发生变化时触发。
    • 该信号只提供新的图标资源的URL地址,而不提供已解析的图标数据。
    • 开发者需要根据这个URL自行加载图片资源(例如通过QImageReader等工具),然后转换成QIcon对象,最后更新UI。

总结来说,iconChanged 提供了 favicon 图片的实体数据,可以直接用于界面更新;而 iconUrlChanged 提供的是图片资源的网址,开发者需要进一步处理才能获取到图片数据。在实际应用中,根据需求可以选择监听其中一个或两个信号,前者更适合快速更新UI,后者则提供了更大的灵活性,但需要额外的处理步骤。

6、void QWebEngineView::loadFinished(bool ok)

void QWebEngineView::loadFinished(bool ok) 是Qt WebEngine模块中QWebEngineView类的一个信号。当网页加载完毕时,不论加载成功与否,该信号都会被触发。

参数 bool ok 表示加载操作是否成功。如果 ok 为 true,则表示网页加载顺利完成;如果为 false,则表示加载过程中遇到了错误或中断。

开发者通常会连接到这个信号来执行网页加载完成后的后续操作,例如:

QObject::connect(webView, &QWebEngineView::loadFinished, [=](bool success){
    if (success) {
        qDebug() start();
    // 禁止用户与界面的某些交互
    someInteractiveWidget->setEnabled(false);
    qDebug() reload();

10、void QWebEngineView::renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode)

void QWebEngineView::renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode) 是Qt WebEngine模块中QWebEngineView类的一个信号。当网页渲染进程突然终止时,这个信号会被触发。

参数说明:

  • QWebEnginePage::RenderProcessTerminationStatus terminationStatus:表示渲染进程结束的状态,它可以是诸如正常退出、异常退出、被浏览器强制结束等各种情况。
  • int exitCode:表示渲染进程的退出代码,对于异常退出等情况,这个代码有助于了解进程为何终止的具体原因。

    当收到这个信号时,开发者通常需要处理这种情况,比如重新加载网页、显示错误提示或者记录日志等。例如:

    QObject::connect(webView, &QWebEngineView::renderProcessTerminated, [&](QWebEnginePage::RenderProcessTerminationStatus status, int code){
        switch (status) {
        case QWebEnginePage::NormalTerminationStatus:
            qDebug() globalPos());
        // 阻止默认的上下文菜单显示
        event->accept();
    }
    // 定义一个槽函数来处理复制操作
    void MyWebEngineView::copySelection()
    {
        // 获取并复制当前选中的文本
        QString selection = this->selectedText();
        qApp->clipboard()->setText(selection);
    }

    在上述代码中,当用户在QWebEngineView中右击时,会弹出自定义的上下文菜单,其中包括一个“复制”选项。如果用户点击了“复制”,则会调用copySelection槽函数,将当前选中的文本复制到剪贴板中。同时,调用event->accept()来阻止默认的上下文菜单出现。

    18、QWebEngineView *QWebEngineView::createWindow(QWebEnginePage::WebWindowType type)

    QWebEngineView *QWebEngineView::createWindow(QWebEnginePage::WebWindowType type) 是Qt WebEngine模块中QWebEngineView类的一个虚拟成员函数。当网页内部触发了一个需要打开新窗口的事件(例如点击了一个标签或运行了打开新窗口的JavaScript代码)时,这个函数会被调用。

    该函数接收一个枚举参数 QWebEnginePage::WebWindowType type,该参数标识了新窗口的类型,例如新标签页、弹出窗口等。

    开发者需要重写这个函数来创建并返回一个新的QWebEngineView实例,以便处理新窗口的打开和显示。如果不重写此函数,默认情况下可能不会创建新窗口或者显示不当。

    示例代码:

    class CustomWebEngineView : public QWebEngineView
    {
        Q_OBJECT
    public:
        CustomWebEngineView(QWidget *parent = nullptr) : QWebEngineView(parent) {}
    protected:
        virtual QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) override
        {
            // 创建并返回一个新的QWebEngineView实例
            auto newView = new QWebEngineView(parentWidget());
            // 可以根据type调整新窗口的外观或行为
            // ...
            return newView;
        }
    };

    在上述示例中,每当网页内部触发打开新窗口事件时,createWindow函数会被调用,并返回一个新的QWebEngineView实例。开发者可以根据窗口类型来自定义新窗口的行为和样式,比如将其嵌入到现有窗口中,或者作为一个新的窗口显示。

    19、void QWebEngineView::dragEnterEvent(QDragEnterEvent *e)

    void QWebEngineView::dragEnterEvent(QDragEnterEvent *e) 是Qt WebEngine模块中QWebEngineView类的一个重载事件处理函数。当拖放操作中的鼠标光标进入QWebEngineView控件区域时,会触发dragEnterEvent事件。

    这个函数允许你自定义当拖动数据进入QWebEngineView时的行为,比如决定是否接受这次拖放操作。在函数中,可以检查拖放的数据类型,并设置事件的acceptProposedAction()属性来决定是否允许数据在此控件上放下。

    void MyWebEngineView::dragEnterEvent(QDragEnterEvent *e)
    {
        if (e->mimeData()->hasFormat("text/plain")) // 检查拖动的数据是否是纯文本格式
        {
            e->acceptProposedAction(); // 接受这次拖放操作,允许数据在此控件上放下
        }
        else
        {
            e->ignore(); // 不接受此次拖放操作
        }
    }

    在这个示例中,如果拖拽的数据类型是纯文本,那么我们允许拖放到QWebEngineView上;否则,忽略这次拖放事件。实际应用中,你可能需要根据你的应用需求来处理不同类型的拖放数据。

    20、void QWebEngineView::dragLeaveEvent(QDragLeaveEvent *e)

    void QWebEngineView::dragLeaveEvent(QDragLeaveEvent *e) 是Qt WebEngine模块中QWebEngineView类的一个重载事件处理函数。当拖放操作中的鼠标光标离开QWebEngineView控件区域时,会触发dragLeaveEvent事件。

    这个函数主要用于处理拖放操作期间鼠标离开视图区域的情况,通常在自定义拖放功能时,可以在这个函数中撤销之前在dragEnterEvent或dragMoveEvent中设置的一些视觉效果或状态。

    示例代码:

    void MyWebEngineView::dragLeaveEvent(QDragLeaveEvent *e)
    {
        // 在这里可以清除之前在dragEnterEvent或dragMoveEvent中设置的任何临时状态或视觉效果
        // 例如,如果在鼠标进入时改变了背景色,这时可以恢复原来的背景色
        setBackgroundColor(originalBackgroundColor);
        // 默认情况下,接受该事件
        e->accept();
    }

    在上述代码中,当拖拽操作离开视图时,视图会恢复到原始背景颜色。实际上,具体的处理逻辑取决于你的应用需求和之前对拖放事件所做的定制。

    21、void QWebEngineView::dragMoveEvent(QDragMoveEvent *e)

    void QWebEngineView::dragMoveEvent(QDragMoveEvent *e) 是Qt WebEngine模块中QWebEngineView类的一个重载事件处理函数。当拖放操作中的鼠标在QWebEngineView控件区域内移动时,会触发dragMoveEvent事件。

    这个函数主要用来处理拖拽过程中鼠标移动时的交互行为,比如可以检测鼠标当前位置,决定是否允许拖放目标区域,并更新相关反馈信息,例如改变鼠标的形状、更新提示信息等。

    示例代码:

    void MyWebEngineView::dragMoveEvent(QDragMoveEvent *e)
    {
        // 检查当前拖放的位置是否满足条件,例如在可接受的范围内
        if (isDropAllowed(e->pos()))
        {
            // 如果允许放下数据,则接受拖动事件
            e->acceptProposedAction();
            // 可以在这里更新界面状态,如改变控件的背景颜色,显示即将放置的提示等
        }
        else
        {
            // 否则,拒绝此次拖动事件
            e->ignore();
        }
    }
    // 示例辅助函数,检查拖放位置是否满足条件
    bool MyWebEngineView::isDropAllowed(const QPoint &pos)
    {
        // 这里可以根据实际需求判断pos坐标是否在有效范围内
        // 以下代码仅为示例,实际逻辑需根据具体应用场景编写
        QRect rect = this->rect();
        return rect.contains(pos);
    }

    在上述代码中,当拖拽操作在QWebEngineView内移动时,会检查当前位置是否满足放置数据的条件,如果满足则接受拖动事件,反之则忽略。同时,可以根据实际情况在这个函数内实现更多复杂的拖放逻辑。

    22、void QWebEngineView::dropEvent(QDropEvent *e)

    void QWebEngineView::dropEvent(QDropEvent *e) 是Qt WebEngine模块中QWebEngineView类的一个重载事件处理函数。当用户在QWebEngineView控件上完成拖放操作(即释放鼠标按钮)时,会触发dropEvent事件。

    在该函数中,你可以处理拖放的实际数据交换,获取拖放的数据类型,并将数据应用到QWebEngineView中,例如在网页中插入文本、图片或其他类型的数据。

    下面是一个简单的示例:

    void MyWebEngineView::dropEvent(QDropEvent *e)
    {
        if (e->mimeData()->hasUrls())
        {
            foreach (const QUrl &url, e->mimeData()->urls())
            {
                // 处理URL数据,例如加载拖放的链接
                load(url);
            }
            e->acceptProposedAction();
        }
        else if (e->mimeData()->hasText())
        {
            // 处理文本数据,例如将拖放的文本插入到网页中
            QString text = e->mimeData()->text();
            // 这里假设有一个insertTextToWebPage(text)的函数可以将文本插入到网页中
            insertTextToWebPage(text);
            e->acceptProposedAction();
        }
        else
        {
            e->ignore();
        }
    }

    在这个示例中,当用户在QWebEngineView上完成拖放操作时,程序会检查拖放的数据类型。如果是URL链接,则加载该链接;如果是文本,则将其插入到网页中。如果数据类型不支持,则忽略这次拖放事件。

    23、bool QWebEngineView::event(QEvent *ev)

    bool QWebEngineView::event(QEvent *ev) 是Qt框架中QWebEngineView类的一个重载函数。在Qt中,所有继承自QObject的类都可以通过重写event()函数来处理各种事件。这个函数接收一个QEvent指针作为参数,通过检查事件类型并进行适当处理。

    在QWebEngineView中,event()函数可以处理所有发送给QWebEngineView对象的事件,包括但不限于键盘输入、鼠标事件、窗口事件等。如果您想自定义QWebEngineView的行为,比如处理一些特殊的事件或扩展默认行为,可以重写这个函数。

    以下是一个简单的示例,展示了如何在event()函数中处理特定类型的事件:

    bool MyWebEngineView::event(QEvent *ev)
    {
        if (ev->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast(ev);
            // 处理按键事件,例如禁用某个键的功能
            if (keyEvent->key() == Qt::Key_F5) {
                // 禁止F5键刷新页面
                ev->ignore();
                return true;
            }
        }
        // 对于未处理的事件,调用父类的event()函数
        return QWebEngineView::event(ev);
    }

    在上述代码中,当QWebEngineView接收到按键事件时,会检查是否为F5键,如果是,则忽略该事件(不执行默认的刷新页面操作),并返回true表示事件已被处理。对于其他类型的事件,如果没有特殊处理,就交由QWebEngineView的基类来处理。

    24、void QWebEngineView::findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags(), const QWebEngineCallback &resultCallback = QWebEngineCallback())

    void QWebEngineView::findText(const QString &subString, QWebEnginePage::FindFlags options = QWebEnginePage::FindFlags(), const QWebEngineCallback &resultCallback = QWebEngineCallback()) 是Qt WebEngine模块中QWebEngineView类的一个成员函数,用于在网页内容中查找指定的字符串。

    函数参数解释:

    • const QString &subString:要在网页中搜索的字符串。

    • QWebEnginePage::FindFlags options:查找选项,可以是以下几种标志的组合(使用|符号连接):

      • QWebEnginePage::CaseSensitively:区分大小写查找。
      • QWebEnginePage::HighlightAllOccurrences:高亮所有找到的结果。
      • QWebEnginePage::WordStart:从单词开始处查找。
      • 其他可能的查找选项。
    • const QWebEngineCallback &resultCallback:查找结果回调函数,当查找完成时,会调用这个回调函数,并传入一个布尔值表示是否找到了匹配项。

      myWebEngineView.findText("搜索关键词", QWebEnginePage::FindFlags(QWebEnginePage::CaseSensitively | QWebEnginePage::HighlightAllOccurrences),
                             [](bool found) {
                                 if (found) {
                                     qDebug() runJavaScript("console.log('Hello from JavaScript');");

      在上述示例中,我们首先创建了一个QWebEngineView对象并加载网页,然后通过调用page()函数获取了与之关联的QWebEnginePage对象,并执行了一个JavaScript命令。

      30、void QWebEngineView::load(const QWebEngineHttpRequest &request)

      void QWebEngineView::load(const QWebEngineHttpRequest &request) 是Qt WebEngine模块中QWebEngineView类的一个函数,用于根据提供的QWebEngineHttpRequest对象加载网页内容。这个函数允许开发者自定义HTTP请求,包括设置请求方法(如GET、POST等)、请求头和请求体等,从而实现更精细的网页加载控制。

      例如,如果你想通过POST方法发送JSON数据到服务器并加载响应的网页内容,可以这样使用:

      QWebEngineHttpRequest request;
      request.setUrl(QUrl("http://example.com/api/login")); // 设置请求的URL
      request.setMethod(QWebEngineHttpRequest::Post); // 设置请求方法为POST
      QJsonObject json;
      json["username"] = "testuser";
      json["password"] = "testpass";
      QJsonDocument doc(json);
      request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); // 设置Content-Type头
      request.setBody(doc.toJson()); // 设置请求体为JSON数据
      QWebEngineView *webView = new QWebEngineView(parentWidget);
      webView->load(request); // 使用自定义的HTTP请求加载网页

      在上述代码中,我们创建了一个QWebEngineHttpRequest对象,并设置了URL、HTTP方法、Content-Type头以及请求体,然后将这个请求对象传递给QWebEngineView的load函数,以发起一个POST请求到指定的URL,并加载返回的网页内容。

      31、QAction *QWebEngineView::pageAction(QWebEnginePage::WebAction action) const

      QAction *QWebEngineView::pageAction(QWebEnginePage::WebAction action) const 是Qt WebEngine模块中QWebEngineView类的一个成员函数。这个函数用于获取与给定的QWebEnginePage::WebAction相关的QAction对象。

      QWebEnginePage::WebAction是一个枚举类型,列举了一系列与网页操作相关的动作,如后退、前进、刷新、停止加载、复制、粘贴等。当你调用这个函数并传入一个WebAction枚举值时,它会返回一个与该动作关联的QAction对象。

      有了这个QAction对象,你就可以将其添加到菜单、工具栏或者关联快捷键,使用户能够方便地执行这些动作。

      示例:

      QAction *backAction = webView->pageAction(QWebEnginePage::WebAction::Back);
      backAction->setShortcut(QKeySequence::Back); // 设置后退按钮的快捷键为Alt+左方向键
      menu->addAction(backAction); // 将后退动作添加到菜单中

      在上述示例中,我们获取到了与后退操作关联的QAction对象,并为其设置了快捷键,并将其添加到了菜单中。这样,用户就可以通过菜单或快捷键执行后退操作了。

      32、void QWebEngineView::setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl())

      void QWebEngineView::setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl()) 是Qt WebEngine模块中QWebEngineView类的一个成员函数。这个函数用于将给定的二进制数据加载到QWebEngineView中,并显示为网页内容。

      参数解释:

      • const QByteArray &data: 包含要显示的网页内容的二进制数据。这可能是HTML、CSS、JavaScript或者其他符合某种MIME类型的文件内容。
      • const QString &mimeType: 指定数据的MIME类型,例如 "text/html"、"image/jpeg" 等。如果省略此参数,默认为空字符串,通常在这种情况下,如果数据看起来像HTML,WebKit引擎会尝试将其当作HTML处理。
      • const QUrl &baseUrl: 指定基础URL,用于解析相对URL。如果省略此参数,默认为空QUrl。在处理包含相对URL的文档时,基础URL是非常重要的,因为它会影响资源加载路径的解析。

        使用示例:

        QByteArray htmlData = "

        Hello, World!

        "; QUrl base("http://example.com"); webView->setContent(htmlData, "text/html", base);

        上述代码将一段HTML数据加载到QWebEngineView中,并设置了一个基础URL。这样,如果HTML文档中有引用相对路径的资源(如图像、CSS文件等)

        33、void QWebEngineView::setHtml(const QString &html, const QUrl &baseUrl = QUrl())

        void QWebEngineView::setHtml(const QString &html, const QUrl &baseUrl = QUrl()) 是Qt WebEngine模块中的一个函数,它用于在 QWebEngineView 组件中显示HTML内容。这个函数接受两个参数:

        1. const QString &html: 这是你想要显示的HTML内容字符串。
        2. const QUrl &baseUrl = QUrl(): 这是基础URL,用于解析HTML内容中相对路径的链接和其他资源。如果省略或者留空,默认的基础URL将是空的。

        使用示例:

        QString htmlContent = "

        Hello, World!

        "; QUrl baseUri("http://example.com"); // 可以留空,表示没有基础URL myWebEngineView->setHtml(htmlContent, baseUri);

        在这段代码中,myWebEngineView 是一个 QWebEngineView 类型的对象,通过调用 setHtml 函数,我们可以把 htmlContent 字符串中的HTML内容显示在这个浏览器组件中,同时指定基础URL为 "http://example.com"。如果HTML内容中有相对路径的链接或引用资源,引擎将使用提供的基础URL来解析它们。

        34、void QWebEngineView::setPage(QWebEnginePage *page)

        QWebEngineView类的一个函数,用于设置QWebEngineView所使用的QWebEnginePage页面对象。

        QWebEngineView是用来显示网页内容的主要视图组件,而QWebEnginePage则是承载网页内容和网页脚本执行环境的实际载体。通过调用 setPage 函数,您可以将一个已经创建好的QWebEnginePage对象赋给QWebEngineView,使视图显示该页面的内容。

        例如:

        QWebEnginePage *newPage = new QWebEnginePage(this);
        // 可以对newPage做进一步的设置,如设置页面代理、设置JavaScript权限等
        QWebEngineView *webView = new QWebEngineView(parent);
        webView->setPage(newPage);
        // 加载网页
        newPage->load(QUrl("http://www.example.com"));

        在这段代码中,首先创建了一个新的QWebEnginePage对象newPage,然后创建了一个QWebEngineView对象webView,并通过setPage函数将newPage设置为webView要显示的页面,最后加载了一个网址到newPage中,这样webView就会显示这个网页的内容。

        35、QWebEngineSettings *QWebEngineView::settings() const

        QWebEngineSettings *QWebEngineView::settings() const 是Qt WebEngine模块中QWebEngineView类的一个成员函数。这个函数返回一个指向QWebEngineSettings对象的指针,该对象包含了与QWebEngineView关联的网页渲染和行为相关的各种设置选项。

        通过这个函数,您可以获取并修改QWebEngineView的各种高级设置,比如:

        • JavaScript是否启用
        • 是否允许弹出窗口
        • 是否加载图片
        • 是否启用网页插件
        • 是否启用网页存储数据(如cookies、localStorage等)
        • 用户代理字符串设置
        • 网页安全策略等等

          示例:

          QWebEngineView *webView = new QWebEngineView(parent);
          QWebEngineSettings *settings = webView->settings();
          // 禁止加载图片
          settings->setAttribute(QWebEngineSettings::AutoLoadImages, false);
          // 允许JavaScript执行
          settings->setAttribute(QWebEngineSettings::JavascriptEnabled, true);

          在这个示例中,我们首先获取了QWebEngineView的设置对象,然后分别禁止了图片的自动加载,并启用了JavaScript执行。

          36、void QWebEngineView::showEvent(QShowEvent *event)

          void QWebEngineView::showEvent(QShowEvent *event) 是Qt WebEngine模块中QWebEngineView类的一个覆盖方法,它是对QWidget的showEvent事件进行处理的函数。当QWebEngineView组件即将变为可见状态时(即从隐藏变为显示),这个事件处理器会被调用。

          通常在重写这个方法时,你可以在这里做一些在视图显示之前或者显示时需要执行的操作,比如加载网页、调整视图大小、初始化视图状态等。例如:

          void MyWebEngineView::showEvent(QShowEvent *event)
          {
              // 调用父类的showEvent方法以确保默认处理得以执行
              QWebEngineView::showEvent(event);
              // 在视图显示时加载一个初始网页
              load(QUrl("https://www.example.com"));
              // 或者执行其他与视图显示相关的操作
          }

          在这个示例中,当MyWebEngineView变为可见时,它会加载指定的网页地址。当然,你可以根据实际需求在这个函数中执行其他定制的操作。

          37、QSize QWebEngineView::sizeHint() const

          QSize QWebEngineView::sizeHint() const 是Qt WebEngine模块中QWebEngineView类的一个成员函数,它返回一个QSize对象,表示QWebEngineView组件建议的最佳大小(size hint)。

          这个大小通常是由QWebEngineView内部根据其内容(如加载的网页大小)计算得出的,用于向布局管理器提供一个参考大小。布局管理器可以根据这个提示信息来更好地安排组件的布局,但最终的大小可能会因为布局约束或者其他因素而不同于这个size hint。

          在实践中,如果你想要获取QWebEngineView在其内容加载完毕后的理想大小,可以调用这个函数获取。然而,具体的显示大小仍需由其父窗口或布局管理器决定。

          38、void QWebEngineView::triggerPageAction(QWebEnginePage::WebAction action, bool checked = false)

          void QWebEngineView::triggerPageAction(QWebEnginePage::WebAction action, bool checked = false) 是Qt WebEngine模块中QWebEngineView类的一个函数,它用于触发与给定WebAction枚举值关联的页面操作。

          QWebEnginePage::WebAction是一个枚举类型,包含了多种预定义的网页操作,如打开新窗口、后退、前进、刷新、停止加载、打印等。

          函数参数说明:

          • QWebEnginePage::WebAction action:指定要触发的WebAction操作,例如 QWebEnginePage::Back 表示后退,QWebEnginePage::Reload 表示刷新页面等。
          • bool checked = false:对于某些操作,如检查/取消检查复选框(例如“是否启用Java”这类设置),这个参数用于指定操作的开关状态。对于大多数WebAction而言,这个参数并不重要,但对于某些涉及状态切换的操作可能需要设置。

            例如,触发页面后退操作:

            webEngineView->triggerPageAction(QWebEnginePage::Back);

            触发页面刷新操作:

            webEngineView->triggerPageAction(QWebEnginePage::Reload);

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]