我想在新流程的新窗口中打开QWebView
与target="_blank"
的链接。
我尝试使用QWebView::createWindow(QWebPage::WebWindowType)
,但我找不到将url发送到新进程的方法。实际上,我尝试使用隐藏的QWebView
(由createWindow
方法返回)使用urlChanged
事件来获取网址,但有时会触发此事件两次,因此不会可靠。
有没有办法在createWindow
方法中获取网址?
如果没有,我该怎么做才能在新流程的新窗口中打开这种链接?
答案 0 :(得分:1)
我找到了一种方法来做我想做的事。
我不得不重载mousePressEvent
以获取鼠标位置,以便我可以从中获取网址。
以下是代码:
QWebView* WebView::createWindow(QWebPage::WebWindowType) {
QWebHitTestResult result{page()->mainFrame()->hitTestContent(lastClickPosition)};
openNewWindow(result.linkUrl());
return nullptr;
}
void WebView::mousePressEvent(QMouseEvent* mouseEvent) {
lastClickPosition = mouseEvent->pos();
QWebView::mousePressEvent(mouseEvent);
}
我让这个问题开了几天,看看是否有人能找到更好的解决方案。
答案 1 :(得分:0)
如果您正在尝试使用多进程Webview架构,我建议您查看QtWebEngine
。 QtWebEngine
将取代QtWebKit
,并以Chromium为基础。因此,默认情况下它具有多进程架构。 QtWebEngine
将不再更新,因此无论如何我建议迁移到QtWebEngine
。