2015-04-21 2 views
4

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

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

_webView = new QWebEngineView(); 

.... 

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

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

«Просить контекста акций для виджета, который не имеет дескриптор окна» «QOpenGLWidget: Может не использовать без контекста, совместно используемого с верхним слоем ".

Есть ли у кого-нибудь пример визуализации экрана с использованием QWebEngine?

ответ

2

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

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

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

+1

Привет, Ричард. Пожалуйста, можете ли вы дать больше информации о том, как вы это решили? Мы стучим головой о стену! –

3

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

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

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

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

Смежные вопросы