QWebView Открыть в новом окне

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

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

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

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


person antoyo    schedule 12.04.2015    source источник


Ответы (2)


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

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

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

person antoyo    schedule 13.04.2015

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

Обзор QtWebEngine

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