QWebView在新窗口中打开

时间:2015-04-12 18:08:46

标签: qt webkit qwebview

我想在新流程的新窗口中打开QWebViewtarget="_blank"的链接。

我尝试使用QWebView::createWindow(QWebPage::WebWindowType),但我找不到将url发送到新进程的方法。实际上,我尝试使用隐藏的QWebView(由createWindow方法返回)使用urlChanged事件来获取网址,但有时会触发此事件两次,因此不会可靠。

有没有办法在createWindow方法中获取网址?

如果没有,我该怎么做才能在新流程的新窗口中打开这种链接?

2 个答案:

答案 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架构,我建议您查看QtWebEngineQtWebEngine将取代QtWebKit,并以Chromium为基础。因此,默认情况下它具有多进程架构。 QtWebEngine将不再更新,因此无论如何我建议迁移到QtWebEngine

QtWebEngine overview