2012-04-01 68 views
1

我有flash播放器上QWebkit運行,並在Flash播放器也有一些網頁鏈接 需要在外部瀏覽器中打開,我所做的是:打開外部鏈接託管在QWebKit

m_webView->page()->setLinkDelegationPolicy(QWebPage::LinkDelegationPolicy::DelegateAllLinks); 
    connect(m_webView->page(),SIGNAL(linkClicked(const QUrl&)), 
          this, 
          SLOT(linkClickedHandler(const QUrl&)),Qt::DirectConnection); 


void WebBroswerDeleget::linkClickedHandler(const QUrl& url) 
{ 
QDesktopServices::openUrl(QUrl(url.toString(), QUrl::TolerantMode)); 
} 

但它從來沒有觸發我改變連接從m_webView-> page()到m_webView

+0

如果你點擊外閃正常的鏈路上是否行得通?這是外部鏈接還是錨鏈接?你使用的是什麼版本的Qt?什麼平臺? – 2012-04-01 11:53:53

+0

即時通訊在Windows XP 32位使用4.8,它不工作 – user63898 2012-04-01 12:46:06

回答

1

我重寫了QWebview :: c reateWindow這樣的:

QWebView* MyAdWebview::createWindow (QWebPage::WebWindowType type) 
{ 
    QWebView* p = new QWebView(0); 
    connect(p->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(newWindowLoadFinished(QNetworkReply*)), Qt::UniqueConnection); 
    return p; 
} 

void MyAdWebview::newWindowLoadFinished(QNetworkReply* reply) { 
    QDesktopServices::openUrl(reply->url().toString()); 
} 

QDesktopServices ::的OpenURL是這個網址打開默認的系統瀏覽器對自定義功能

0

這對我來說既適用於4.7.2 QtEmbedded,也適用於mac 4.8.1。我不明白的是:

m_webView->page()->setLinkDelegationPolicy(QWebPage::LinkDelegationPolicy::DelegateAllLinks); 

只要做到:

m_webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); 

像這樣的事情對我的作品:

#include <QWebPage> 
#include <QWebView> 
#include <QApplication> 
#include "sigrec.h" 

int main(int argc, char** argv) 
{ 
    QApplication a(argc, argv); 

    SigRec rec; 

    QWebView view; 
    view.page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); 
    QObject::connect(view.page(), SIGNAL(linkClicked(const QUrl&)), &rec, SLOT(onLinkClicked(const QUrl&)), 
        Qt::DirectConnection); 
    view.show(); 
    view.setUrl(QUrl("http://www.google.com")); 

    return a.exec(); 
} 

哪裏SigRec是這樣的:

#ifndef SIGREC_H 
#define SIGREC_H 

#include <QObject> 
#include <QUrl> 

class SigRec : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit SigRec(QObject *parent = 0); 

public slots: 
    void onLinkClicked(const QUrl &url); 
}; 

#endif // SIGREC_H