Открывать внешние ссылки из флеш-плеера, размещенного на QWebKit - PullRequest
1 голос
/ 01 апреля 2012

у меня на 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

Ответы [ 2 ]

1 голос
/ 01 сентября 2015

я переопределил 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 - это функция cutom, которая открывает системный браузер по умолчанию с этим URL

0 голосов
/ 01 апреля 2012

Это работает для меня на 4.7.2 QtEmbedded и 4.8.1 на Mac.Что я не понимаю, так это:

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
...