2010-10-21 27 views
1

Je suis principalement un développeur web, donc ma question peut être un peu un débutant. J'écris une fonction qui fonctionne avec du contenu QWebView, une sorte de script de macro qui agit sur une page Web chargée.QT: Pause de la fonction jusqu'à ce que QWebView SIGNAL soit complété

Code

est quelque chose comme ça:

somefunction() { 

QWebView *webView; 
webView->load(QUrl("http://www.google.com")); 
<...> here I want to pause the code until the page is loaded <...> 
here goes the code of html manipulation, click on another link 
<...> here I want to pause the code until the page is loaded <...> 

} 

Ok, donc dans des endroits où j'ai écrit "< ...> ici, je veux mettre en pause le code jusqu'à ce que la page est chargée < ...>" I ne sais pas quoi faire pour mettre en pause la fonction et faire attendre que la page se termine le chargement. Je connais les signaux et les slots. Mais si j'utilise slot ici, je vais devoir continuer dans une autre fonction - dans la fonction SLOT, mais je veux laisser tout le code et la logique dans somefunction(). Comment faire ça?

Répondre

3

Vous pouvez utiliser un QEventLoop imbriqué pour synchroniser le traitement asynchrone comme le chargement de la page. Lorsque loadFinished est émis, juste exit() la boucle pour reprendre l'exécution à partir de l'endroit où vous avez entré la boucle. D'autre part, le fractionnement du traitement à plusieurs fonctions (slots) n'est pas si mal non plus. Le code et la logique sont toujours au même endroit dans la même classe.

+0

laalto, merci pour ce bon indice! il a déplacé le processus d'une impasse! – Timus83

+0

Le fractionnement du traitement en plusieurs fonctions est une très bonne idée. J'aime ce design. Je vais utiliser dans ma demande actuelle – Jack