![](/img/trans.png)
[英]QWebEngineView::renderProcessTerminated signal not working in QT C++
[英]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.