将页面加载到 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.h
,QWebView
的子 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();
}
假设我们有一个准系统 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.h
,QWebView
的子 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();
}