2015-05-03 30 views
2

比方说,我们有一个准系统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(); 
} 

如何显示图形覆盖,最好用透明性和最小的动画从当全屏(如定时器/皮球的/ etc。)该页面开始加载直到完成?当网址从QWebView内变化时也应该被触发。

回答

1

您可以使用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(); 
} 
+0

哇,谢谢!由于我是直接从C到Qt和C++的新领域,所以这个代码示例对于我看到基本使用新语法非常有帮助......将尝试一下并在标记正确之前看看它是如何进行的。谢谢! – davidkomer

+0

当我使用'loadStarted'和'loadFinished'方法时,注意到这些信号可以(并且经常)被多次调用同一个网页,因为各种帧加载和完成加载。一些具有非常动态内容的网站几乎一直处于“加载”状态,因此在考虑这种类似的UI/UX方面时,请记住这一点:) –