我们已经有了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中获取链接点击事件的方法,但我们无法获得链接点击事件。
我可以尝试任何建议吗?
先谢谢。
答案 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中的官方example或kdab中的{}或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;
}