簡體   English   中英

鏈接點擊信號 QWebEngineView

[英]Link clicked signal QWebEngineView

我們已經有了 QWebView 實現,現在我們想遷移到 QWebEngineView。

通過QWebView,我們在下面注冊了信號以接收任何鏈接在webview上被點擊的通知,我們在QWebView中收到信號。

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

在“urlLinkClicked”插槽中,我們正在打開新標簽並將該 URL 打開到新標簽中。

我們正面臨 QWebEngineView 的一些問題。 由於 QWebEngineView 中不存在這樣的信號“linkClicked”。 所以我們嘗試了以下選項,但仍然無法找到解決方案。

  • 在主類中,我們創建了 WebEngineView 類實例並設置了 WebEnginePage。 我們能夠在視圖類中呈現網站,但是當我們單擊任何鏈接時,我們沒有收到任何信號,因此我們無法在新選項卡中打開該新網站。

    m_WebEngineView = new QWebEngineView(this); m_WebEngineView->setPage(new QWebEnginePage()); 我們還覆蓋了“acceptNavigationRequest”方法以獲取 mainWebEngineView 中的鏈接點擊事件,但我們無法獲取鏈接點擊事件。

我可以嘗試的任何建議?

提前致謝。

在 QWebEnginePage 子類中覆蓋 QWebEnginePage::acceptNavigationRequest:

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

我認為您可以使用信號“urlChanged”。

請參閱官方文檔頁面上的標題“信號”。 http://doc.qt.io/qt-5/qwebengineview.html

如果這沒有幫助,我需要知道您使用的是哪個版本的 Qt 框架。

最好的問候/拉斯穆斯

不幸的是,只有當當前頁面的 url 更改時, QWebenginePage發出urlChanged信號。 當當前頁面的 url 未更改時,也會發出上一個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 的官方示例kdab 的示例Qt Developer Days會議的此視頻

在繼承的 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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM