链接点击信号QWebEngineView

时间:2016-10-21 06:55:05

标签: c++ qt webkit qtwebengine

我们已经有了QWebView实现,现在我们想要迁移到QWebEngineView。

通过QWebView,我们在下面注册了信号,以便接收任何链接的通知,无论是否在webview上点击,我们都会在QWebView中收到信号。

connect(m_WebView, SIGNAL(linkClicked(const QUrl &)),SLOT(urlLinkClicked(const QUrl &)));

在" urlLinkClicked"我们正在打开新标签页并将该网址打开到新标签页。

我们正面临QWebEngineView的一些问题。因为没有这样的信号" linkClicked"存在于QWebEngineView中。所以我们尝试了以下选项,但仍无法找到解决方案。

  • 在主类中,我们创建了WebEngineView类实例并设置了WebEnginePage。我们可以在视图类中呈现网站,但是当我们点击任何链接时,我们没有收到任何信号,因此我们无法在新标签中打开该新网站。

    m_WebEngineView = new QWebEngineView(this); m_WebEngineView->setPage(new QWebEnginePage()); 我们还覆盖" acceptNavigationRequest"在mainWebEngineView中获取链接点击事件的方法,但我们无法获得链接点击事件。

我可以尝试任何建议吗?

先谢谢。

4 个答案:

答案 0 :(得分:1)

在QWebEnginePage子类中覆盖QWebEnginePage :: acceptNavigationRequest:

bool MyWebPage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
{
    if (type == QWebEnginePage::NavigationTypeLinkClicked)
    {
        qDebug() << url;
    }
    return true;
}

答案 1 :(得分:0)

我认为您可以使用“urlChanged”信号。

请参阅官方文档页面上的标题“Signals”。 http://doc.qt.io/qt-5/qwebengineview.html

如果这没有帮助,我需要知道你正在使用的Qt框架版本。

最诚挚的问候 / Rasmus

答案 2 :(得分:0)

不幸的是urlChanged仅在当前页面的网址发生更改时发出QWebenginePage的信号。当前页面的网址未更改时,也会发出上一个linkClicked信号。有一种方法可以解决这个问题,但您需要访问页面源代码。

这个功能是通过QWebChannel课程来实现的。您需要创建webChannel对象和一个特殊的回调类,它将以您喜欢的方式处理来自网页的回调。然后你需要在你想要的页面上设置这个webChanell并执行所有这样的连接:

MyCallBackObject* callback= new MyCallBackClass();
mWebChannel = new QWebChannel(this);
mWebChannel->registerObject(QStringLiteral("MyCallBackObject"), callback);
mWebView->page()->setWebChannel(mWebChannel); // mWebView is QWebEngineView
connect(callback, SIGNAL(urlChanged(QUrl)),
        this, SLOT(linkClickedSlot(QUrl))); // connect statement, urlChanged is defined in your callback class, linkClickedSlot is a slot where you process clicked signal

如需更多参考 - 请使用qt中的官方examplekdab中的{}或Qt Developer Days会议中的此视频

答案 3 :(得分:0)

在继承的WebEngineView和继承的网页中使用它,我们可以找到hoverdUrl

QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type)
    {
        if(type==QWebEnginePage::WebBrowserTab)
        {
            if(!hoverdUrl.isEmpty())
                QDesktopServices::openUrl(QUrl(hoverdUrl));

             qGlobalDbg("Open external Url requiested in chat, url : " + hoverdUrl, toKIBANA|toLOG);
        }
        //qDebug()<<"============== link Clicked "<<hoverdUrl;
        return NULL;
    }