1

我在 QWebkit 上运行了 flash 播放器,在 flash 播放器上有一些需要在外部浏览器中打开的网络链接,我所做的是:

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,它也从未触发

4

2 回答 2

1

我像这样覆盖了 QWebview::createWindow:

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 是一个自定义函数,它使用这个 url 打开默认的系统浏览器

于 2015-09-01T10:04:24.993 回答
0

这对我在 Mac 上的 4.7.2 QtEmbedded 和 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
于 2012-04-01T16:51:13.233 回答