2015-04-21 1 views
4

Je cherche à remplacer QWebKit par QWebEngine dans mon moteur de rendu sans écran. J'initialise la page avec load() et connecte un emplacement à loadFinished() pour générer l'image .PNG finale. Cela fonctionnait normalement avec WebKit mais échoue avec QWebEngine.Utilisation de QWebEngine pour rendre une image

code est le suivant ...

_webView = new QWebEngineView(); 

.... 

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

Je reçois les erreurs suivantes:

"Demander contexte d'actions pour un widget qui ne dispose pas d'une poignée de fenêtre" « QOpenGLWidget: Impossible être utilisé sans contexte partagé avec le toplevel ".

Quelqu'un at-il un exemple de rendu d'un écran à l'aide QWebEngine?

Répondre

2

La réponse de @wlalele a aidé, vous avez besoin d'appeler view-> show() , mais ce n'était pas le seul problème. En fin de compte que je devais hériter de QWebEngineView et remplacer le filtre d'événements pour surveiller les demandes de mise à jour ..

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

seulement après un événement UpdateRequest a été reçu êtes-vous assuré d'avoir accès à la page dans la vue() -> fonction de rendu.

+1

Salut Richard, S'il vous plaît pouvez-vous donner plus d'informations sur la façon dont vous avez résolu cela? Nous nous cognons la tête contre un mur! –

3

Je viens d'avoir le même problème, je l'ai résolu en montrant le QWebEngineView après la charge.

Voici l'exemple qui m'a aidé: http://doc.qt.io/qt-5/qwebengineview.html#details

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

J'espère que cela vous aidera