Bonjour, je me permets de poster un message sur ce forum, car bien qu'en règle générale, je trouve une solution à mes problèmes dans des topic déjà existant aujourd'hui, je ressors bredouille dans ma quête du savoir.
Tout d'abord, merci a tout ceux qui prendront le temps de me déchiffrer et qui en plus prendrons le temps de m'instruire.
Alors voili voilou le souci j'ai une ptite classe APIConnectable qui aura pour rôle d'envoyer des WebRequest en masquant le fonctionnement
APIConnectable.h
APIConnectable.cpp
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
17
18 #include "WebRequest.h" #include <QNetworkAccessManager> #include <QNetworkReply> #include <QObject> class APIConnectable:public QObject { Q_OBJECT public: static APIConnectable* getInstance(); void sendRequest(WebRequest &r); ~APIConnectable(); private: static QNetworkAccessManager* manager; static APIConnectable* instance; APIConnectable(); QNetworkReply* rply; };
WebRequest.h
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #include "APIConnectable.h" #include <iostream> APIConnectable* APIConnectable::instance=nullptr; QNetworkAccessManager* APIConnectable::manager=nullptr; APIConnectable::APIConnectable() { manager = new QNetworkAccessManager(); } APIConnectable* APIConnectable::getInstance() { if(instance==nullptr ) { instance = new APIConnectable(); } return instance; } void APIConnectable::sendRequest(WebRequest &r) { qDebug()<<"j'arrive la np"; rply= manager->get(*r.getQNetworkRequest()); QObject::connect(rply,SIGNAL(finished()),&r,SLOT(requestCompleted())); } APIConnectable::~APIConnectable() { return; }
WebRequest.cpp
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
17
18
19
20
21
22
23
24
25
26 #include "Request.h" #include "QNetworkRequest" #include "QNetworkReply" #include "QUrl" #include <iostream> #include <QObject> class WebRequest:public QObject { Q_OBJECT private: QNetworkReply *reply; QNetworkRequest qNetworkRequest; public: static const QString endParameter; WebRequest(QUrl url); WebRequest(QString urlString); WebRequest(QString urlBegin, QList<QPair<QString,QString>> parameterList); ~WebRequest(); QNetworkRequest* getQNetworkRequest(); QNetworkReply* getReply(); QString buildUrlFromList(QList<QPair<QString,QString>> parameterList); bool isFinished(); public slots: void requestCompleted(); };
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include "WebRequest.h" #include <QDebug> const QString WebRequest::endParameter="ENDPARAMETER"; QNetworkRequest* WebRequest::getQNetworkRequest() { return new QNetworkRequest(qNetworkRequest); } void WebRequest::requestCompleted() { qDebug()<<"good ou pas mdr "; reply=static_cast<QNetworkReply*>(sender()); } QNetworkReply* WebRequest::getReply() { return reply; } WebRequest::WebRequest(QUrl url) { qNetworkRequest= QNetworkRequest(url); } WebRequest::WebRequest(QString urlString) { qNetworkRequest=QNetworkRequest( QUrl(urlString)); } WebRequest::WebRequest(QString urlBegin, QList<QPair<QString,QString>> parameterList) { QString urlEnd= buildUrlFromList(parameterList); qNetworkRequest=QNetworkRequest( QUrl(urlBegin+urlEnd)); } QString WebRequest::buildUrlFromList(QList<QPair<QString,QString>> urlList) { QString builtUrl; while(!urlList.isEmpty()) { QPair<QString,QString> currentPair = urlList.takeFirst(); builtUrl+= currentPair.first + currentPair.second; } return builtUrl; } bool WebRequest::isFinished() { return reply->isFinished(); } WebRequest::~WebRequest() { return; }
Et le petit main pour tester tout ca
Et le problème, c'est que le signal n'est jamais émis et je ne sais pas pourquoi si la requête ne fonctionne par si c'est la connexion qui foire ou si le problème vient d'ailleurs.
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
17
18
19
20 #include <iostream> #include <WebRequest.h> #include <APIConnectable.h> #include <QApplication> #include <WebRequest.h> using namespace std; int main(int argc, char *argv[]) { QApplication a(argc, argv); APIConnectable* connector= APIConnectable::getInstance(); APIConnectable* connector2= APIConnectable::getInstance(); WebRequest request(QUrl("https://nominatim.openstreetmap.org/search?q=2+rue+capitaine+pellot&format=xml&polygon=1&addressdetails=1")); qDebug()<<connector<< connector2; connector->sendRequest(request); return 0; }
Je suis plutôt novice avec Qt, je ne l'utilise que depuis quelques semaines, je n'ai pas encore eu la chance de voir l'intégralité de ses fonctionnalitées, mais il me semble que pour voir émettre un signal et en recevoir, il faut rajouter la ligne Q_object que j'ai rajouté au début de mes classes hérité de QObject et dans le .pro mettre core et widget.
voila je sais pas trop si j'ai bien exprimé mon problème mais je remercie a nouveaux tout ce qui prendrons le temps de répondre bonne journée a vous
Partager