2015-04-12 5 views
2

Я хочу, чтобы открыть ссылки с QWebView с target="_blank" в новом окне нового процесса.QWebView Открыть в новом окне

Я пробовал использовать QWebView::createWindow(QWebPage::WebWindowType), но я не нашел способ получить URL-адрес для отправки в новый процесс. На самом деле, я попробовал взломать URL-адрес, используя скрытый QWebView (возвращаемый методом createWindow) с событием urlChanged, но иногда это событие запускается дважды, поэтому оно ненадежно.

Есть ли способ получить URL-адрес в методе createWindow?

Если нет, что я могу сделать, чтобы открыть такие ссылки в новом окне нового процесса?

ответ

1

Я нашел способ сделать то, что я хочу.

Мне пришлось перегрузить 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); 
} 

Я позволяю этот вопрос открыт несколько дней, чтобы увидеть, если кто-то может найти лучшее решение.

0

Если вы пытаетесь создать многопроцессорную веб-архитектуру, я бы предложил посмотреть на QtWebEngine. QtWebEngine будет заменять QtWebKit и основан на Chromium. Из-за этого он по умолчанию имеет архитектуру с несколькими процессами. QtWebEngine больше не будет обновляться, поэтому я бы предложил перейти на QtWebEngine в любом случае.

QtWebEngine overview

+0

Я думаю, что Qt Webkit также является многопроцессорным (начиная с Webkit 2), но я действительно хочу иметь возможность открывать URL-адрес в новом процессе (запущен явным образом моей программой). – antoyo