Использование QWebEngine для рендеринга изображения

Я хочу заменить QWebKit на QWebEngine в моем безголовом рендерере. Я инициализирую страницу с помощью load() и подключаю слот к loadFinished() для создания окончательного изображения .PNG. Раньше это работало нормально с WebKit, но не с QWebEngine.

Код выглядит следующим образом...

_webView = new QWebEngineView();

....

// Render the HTML to an image
QPainter painter(&image);
_webView->page()->view()->render(&painter);
painter.end();

Я получаю следующие ошибки:

«Запрос общего контекста для виджета, у которого нет дескриптора окна» «QOpenGLWidget: нельзя использовать без контекста, общего с верхним уровнем».

У кого-нибудь есть пример рендеринга экрана с помощью QWebEngine?


person Richard Adams    schedule 21.04.2015    source источник


Ответы (2)


У меня была такая же проблема, я решил ее, показав QWebEngineView после загрузки.

Вот пример, который мне помог: http://doc.qt.io/qt-5/qwebengineview.html#details

QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("http://qt-project.org/"));
view->show();

Я надеюсь, что это поможет вам

person wlalele    schedule 04.05.2015

Итак, ответ от @wlalele помог, вам нужно вызвать view->show(), но это была не единственная проблема. В конце концов мне пришлось наследовать от QWebEngineView и переопределить фильтр событий для отслеживания запросов на обновление.

bool CustomWebEngine::eventFilter(QObject* object, QEvent* event)
{
    if (event->type() == QEvent::UpdateRequest)
    {
        emit updateFinished();
    }
}

Только после получения события UpdateRequest вы гарантированно получите доступ к странице в функции view()->render.

person Richard Adams    schedule 18.06.2015
comment
Привет, Ричард. Не могли бы вы дать больше информации о том, как вы решили эту проблему? Мы бьемся головой о стену! - person ; 06.01.2016