QWebView 在新 Window 中打开

QWebView Open in new Window

我想在新进程的新 window 中打开来自 QWebViewtarget="_blank" 的链接。

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

有没有办法在createWindow方法中得到URL?

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

如果您正在尝试多进程 webview 架构,我建议您查看 QtWebEngineQtWebEngine 将取代 QtWebKit 并且基于 Chromium。正因为如此,它默认具有多进程架构。 QtWebEngine 将不再更新,所以我还是建议迁移到 QtWebEngine

QtWebEngine overview

我找到了一种方法来做我想做的事。

我不得不重载 mousePressEvent 来获取鼠标位置,这样我才能从中获取 url。

代码如下:

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);
}

我把这个问题打开几天,看看有没有人能找到更好的解决办法。