假设我们有一个准系统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();
}

从页面开始加载到完成时,如何显示图形叠加层,最好是全屏透明和最小动画(如计时器/沙滩球等)?当网址从QWebView内部更改时也应触发。

最佳答案

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

以下代码将帮助您入门。我将linked answer中的代码放入overlay.h中,QWebView的子类(用于处理覆盖的显示/隐藏)在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();
}

关于c++ - 将页面加载到QWebView时覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30014431/

10-11 19:37