QSignalMapper beispiel für nicht ui signals gesucht
-
geostein8888
- Beiträge: 50
- Registriert: 16. März 2011 08:25
QSignalMapper beispiel für nicht ui signals gesucht
Hallo,
ich habe nun etwas rumgesucht konnte aber nur beispiele finden, welche auf button Clicks etc reagieren, habe versucht dies so umzusetzen dass ich es auch für meine bedürfnisse nutzen kann, leider aber ohne Erfolg.
das Problem:
ich schreibe eine Anwendung, welche per QNetworkAccessManager schrittweise daten von einem server über einzelne requests abholt. Da dies alles asynchron abläuft benötige ich hierzu ein signal/slot ding um die antworten den jeweiligen processmethoden zuzuordnen. Solange ich das ganze in einer Kette mache (ist a fertig initiiere requets b...) funktioniert das nur sobald mehrere request nacheinander gesendet werden (in einer Schleife z.b.) klappt das mit der verarbeitung nicht mehr.
Lösung:
QSignalMapper
nur bekomme ich das nicht hin, da alle beispiele auf signalen der ui basieren und ich nicht so recht verstehe, wie ich hier meine zuurdnung vom Aufruf zur Antwort hinbekommen kann
Georg
ich habe nun etwas rumgesucht konnte aber nur beispiele finden, welche auf button Clicks etc reagieren, habe versucht dies so umzusetzen dass ich es auch für meine bedürfnisse nutzen kann, leider aber ohne Erfolg.
das Problem:
ich schreibe eine Anwendung, welche per QNetworkAccessManager schrittweise daten von einem server über einzelne requests abholt. Da dies alles asynchron abläuft benötige ich hierzu ein signal/slot ding um die antworten den jeweiligen processmethoden zuzuordnen. Solange ich das ganze in einer Kette mache (ist a fertig initiiere requets b...) funktioniert das nur sobald mehrere request nacheinander gesendet werden (in einer Schleife z.b.) klappt das mit der verarbeitung nicht mehr.
Lösung:
QSignalMapper
nur bekomme ich das nicht hin, da alle beispiele auf signalen der ui basieren und ich nicht so recht verstehe, wie ich hier meine zuurdnung vom Aufruf zur Antwort hinbekommen kann
Georg
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
geostein8888
- Beiträge: 50
- Registriert: 16. März 2011 08:25
Was Christian meint ist, dass dir
http://doc.qt.nokia.com/4.7/qnetworkacc ... l#finished
ja bereits mitteilt, welcher Request beendet wurde.. Also das, was du mit dem Mapper machen wolltest, bietet die Manager-Klasse ja bereits..
hth!
http://doc.qt.nokia.com/4.7/qnetworkacc ... l#finished
ja bereits mitteilt, welcher Request beendet wurde.. Also das, was du mit dem Mapper machen wolltest, bietet die Manager-Klasse ja bereits..
hth!
-
geostein8888
- Beiträge: 50
- Registriert: 16. März 2011 08:25
habe mir die doku des networkmanager nochmal angeschaut, verstehe aber nicht wirklich wo der mir hier eine ID des calls zurückgibt (in finished)
gibt es hierzu vielleicht irgend eine deutsche Doku, in meinen Büchern gibt es den Manager nich nicht (den signalmapper auch nciht)
diese asynchron verbindung macht mich noch wahnsinnig
Georg
gibt es hierzu vielleicht irgend eine deutsche Doku, in meinen Büchern gibt es den Manager nich nicht (den signalmapper auch nciht)
diese asynchron verbindung macht mich noch wahnsinnig
Georg
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Gut dann eben keine IDs sondern Pointer auf QNetworkReply.
So hat jeder request einen Unique reply.
Code: Alles auswählen
QNetworkReply * QNetworkAccessManager::get ( const QNetworkRequest & request )
-->
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
geostein8888
- Beiträge: 50
- Registriert: 16. März 2011 08:25
Hallo,
ich stehe heir total auf dem schlauch, aber wie bekomme ich denn diesen reply pointer zurück?
das ganze war wie folgt geplanz:
in main
wsreader:
doQuery: (manager ist der QNetworkAcessManager
handledatafetched:
und hier wird dann eine methode aufgerufen, welche mir die json daten in hashtables abkegt zur späteren verarbeitung und dann
das ganze an meine main als erledigt zurückfunkt.
über diese slots kann ich ja keine return values zurückgeben
Georg
ich stehe heir total auf dem schlauch, aber wie bekomme ich denn diesen reply pointer zurück?
das ganze war wie folgt geplanz:
in main
Code: Alles auswählen
wsReader->getData("headerdata","","");
QObject::connect(datahandler,SIGNAL(sigHeadersLoaded()),this, SLOT(slotTransferFinished()));
Code: Alles auswählen
void wsreader::getData(QString action, QString parameters, QString value){
this->webUrl = "";
if (parameters.length() > 0)
parameters = parameters;
bool dataread = false;
this->dataTypeAction=action;
this->m_reply = NULL;
QByteArray json = getJsonString(action,parameters,value);
QString url = "http://"+this->props->getServerAdress()+"/msm_new/ws/ws.php?json="+json;
this->webUrl = url;
QTimer::singleShot(0,this,SLOT(doQuery()));
}Code: Alles auswählen
void wsreader::doQuery(){
QNetworkRequest req;
QString url = this->webUrl;
req.setUrl(QUrl(url));
m_reply = manager->get(req);
connect(manager,SIGNAL(finished(QNetworkReply*)), this, SLOT(handleDataFetched(QNetworkReply*)));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(handleError(QNetworkReply::NetworkError)));
}Code: Alles auswählen
void wsreader::handleDataFetched(QNetworkReply* reply){
reply->dumpObjectInfo();
QString data = reply->readAll();//m_reply
this->jsonAnswerString = data;
this->transferIsFinished = true;
dataHandler->fillData(data,this->dataTypeAction);
reply->deleteLater();
}Code: Alles auswählen
emit sigHeadersLoaded();über diese slots kann ich ja keine return values zurückgeben
Georg
-
geostein8888
- Beiträge: 50
- Registriert: 16. März 2011 08:25