您可以使用this answer中提供的LoadingOverlay
类在任何QWidget
上绘制覆盖图。在您的情况下,当信号loadStarted
被触发时,在QWebView
的顶部显示覆盖图,并在信号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到Qt和C++的新领域,所以这个代码示例对于我看到基本使用新语法非常有帮助......将尝试一下并在标记正确之前看看它是如何进行的。谢谢! – davidkomer
当我使用'loadStarted'和'loadFinished'方法时,注意到这些信号可以(并且经常)被多次调用同一个网页,因为各种帧加载和完成加载。一些具有非常动态内容的网站几乎一直处于“加载”状态,因此在考虑这种类似的UI/UX方面时,请记住这一点:) –