将页面加载到 QWebView 时覆盖

Overlay while loading page into QWebView

假设我们有一个准系统 QWebView:

#include <QApplication>
#include <QWebView>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QWebView view;

    view.show();
    view.setUrl(QUrl("http://google.com"));

    return app.exec();
}

如何从页面开始加载到完成显示图形叠加层,最好是具有透明度和最少动画的全屏(如 timer/beachball/etc.)?当 url 从 QWebView.

中更改时也应该被触发

您可以使用 this answer 中提供的 LoadingOverlay class 在任何 QWidget 上绘制叠加层。在您的情况下,当触发信号 loadStarted 时,在 QWebView 顶部显示叠加层,并在触发信号 loadFinished 时隐藏它。

以下代码应该可以帮助您入门。我将 linked answer 中的代码放入 overlay.hQWebView 的子 class 处理覆盖层的 showing/hiding 在 webview.h 中:

webview.h

#include "overlay.h"
#include <QWebView>

class WebView : public QWebView
{
    Q_OBJECT
public:
    WebView(QWidget * parent) : QWebView(parent)
    {
        overlay = new LoadingOverlay(parent);
        connect(this,SIGNAL(loadFinished(bool)),this,SLOT(hideOverlay()));
        connect(this,SIGNAL(loadStarted()),this,SLOT(showOverlay())); 
    }
    ~WebView()
    {
    }

public slots:
    void showOverlay()
    {
        overlay->show();
    }

    void hideOverlay()
    {
        overlay->hide();
    }

private:
    LoadingOverlay* overlay;

};

main.cpp

#include <QApplication>

#include "overlay.h"
#include "webview.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ContainerWidget base;
    Webview w(&base);
    base.show();
    w.load(QUrl("http://google.com"));
    return a.exec();
}