Bonjour,
J'aimerai pouvoir utiliser les certains objets Qt en mode synchrone, comme QNetworkManager qui permet de faire des get http.
Seulement ces objets ont clairement été conçus sur un modèle événementiel dans le cadre d'une application GUI.
Pour le coup, un signal finished est émis lorsque la requête prend fin, ce qui permet d'appeler une fonction callback.
La seule manière d'utiliser QNetworkManager de façon bloquante que j'ai trouvé est la suivante :
En gros créer une event loop bidon qui se termine lorsqu'un signal est reçu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 QNetworkRequest request( QUrl("http://..." )); QNetworkAccessManager manager; QEventLoop eLoop; a.connect( &manager, SIGNAL( finished( QNetworkReply * ) ), &eLoop, SLOT(quit() ) ); QNetworkReply *reply = manager.get( request); eLoop.exec(); QByteArray array = reply->readAll(); delete reply; reply = NULL; ....
Rassurez-moi, il y a une meilleure solution?
Partager