QWebView 在新 Window 中打开
QWebView Open in new Window
我想在新进程的新 window 中打开来自 QWebView
和 target="_blank"
的链接。
我尝试使用 QWebView::createWindow(QWebPage::WebWindowType)
,但我没有找到让 url 发送到新进程的方法。实际上,我尝试使用隐藏的 QWebView
(由 createWindow
方法返回)和 urlChanged
事件来获取 url,但有时此事件会触发两次,所以不靠谱。
有没有办法在createWindow
方法中得到URL?
如果没有,我该怎么做才能在新的window新进程中打开这种链接?
如果您正在尝试多进程 webview 架构,我建议您查看 QtWebEngine
。 QtWebEngine
将取代 QtWebKit
并且基于 Chromium。正因为如此,它默认具有多进程架构。 QtWebEngine
将不再更新,所以我还是建议迁移到 QtWebEngine
。
我找到了一种方法来做我想做的事。
我不得不重载 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);
}
我把这个问题打开几天,看看有没有人能找到更好的解决办法。
我想在新进程的新 window 中打开来自 QWebView
和 target="_blank"
的链接。
我尝试使用 QWebView::createWindow(QWebPage::WebWindowType)
,但我没有找到让 url 发送到新进程的方法。实际上,我尝试使用隐藏的 QWebView
(由 createWindow
方法返回)和 urlChanged
事件来获取 url,但有时此事件会触发两次,所以不靠谱。
有没有办法在createWindow
方法中得到URL?
如果没有,我该怎么做才能在新的window新进程中打开这种链接?
如果您正在尝试多进程 webview 架构,我建议您查看 QtWebEngine
。 QtWebEngine
将取代 QtWebKit
并且基于 Chromium。正因为如此,它默认具有多进程架构。 QtWebEngine
将不再更新,所以我还是建议迁移到 QtWebEngine
。
我找到了一种方法来做我想做的事。
我不得不重载 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);
}
我把这个问题打开几天,看看有没有人能找到更好的解决办法。