提问人:JW16 提问时间:5/31/2023 最后编辑:JW16 更新时间:6/1/2023 访问量:71
QWebEnginePage::acceptNavigationRequest() 在链接点击时未被触发
QWebEnginePage::acceptNavigationRequest() not being triggered on link click
问:
我正在从QWebKit(Qt 4.8)移植到QWebEngine(Qt 5.15)。在应用程序中,我们将一些我们自己的基本 HTML 设置到一个视图中(只是一些包含 href 链接的文本)。链接 URL 实际上只是一些文本,我们用它来在桌面应用程序中执行特定操作。
在 Qt 4.8 中,我们将设置 QWebPage::D elegateAllLinks 策略,并将 linkClicked() 信号连接到我们自己的 C++ 类,以便在应用程序中采取适当的操作。
在阅读了Qt移植指南和这篇文章之后,我创建了自己的QWebEnginePage子类,该子类覆盖了acceptNavigationRequest()以在链接点击操作时发出自己的信号,并在我的QWebEngineView中设置它,与帖子中描述的完全相同:
bool MyWebEnginePage::acceptNavigationRequest( QUrl const &url, QWebEnginePage::NavigationType type, bool isMainFrame )
{
if( type == QWebEnginePage::NavigationTypeLinkClicked )
{
emit linkClicked( url );
return false;
}
return QWebEnginePage::acceptNavigationRequest( url, type, isMainFrame );
}
并设置视图/页面:
m_webView = new QWebEngineView( m_widget );
m_webView->setPage( new MyWebEnginePage() );
connect( m_webView->page(), SIGNAL( linkClicked( QUrl const & ) ), this, SLOT( onLinkClicked( QUrl const& ) ) );
m_webView->setHtml( "<html><body>Some Text and a <li><a href=\"linkAction\">Link</a></li></body>" );
调用 setHtml() 后,视图/页面加载包含链接的 HTML,但视图变为空白,单击任何链接后我的应用程序中没有任何反应。在调试器中,acceptNavigationRequest() 根本不会在链接单击时触发!它仅在通过 setHtml() 加载 HTML 时触发一次。
我想在点击链接后立即了解Qt在做什么。链接点击是否会导致创建另一个 QWebEnginePage 并尝试加载我们试图拦截的无意义 URL?
答: 暂无答案
评论