c++ - QNetworkRequest (HTTP GET) doesn't fire, after refactoring into a standalone class -


i've began tedious process of modularising large, monolithic audio player application wrote 2 months ago.

this process going reasonably well, although appears 1 of methods (scrobblemedia - predictably enough makes http requests submit information playing track last.fm) no longer seems make network requests.

however, qurl object passed through qnetworkaccessmanager instance/qnetworkrequest being built correctly.

for comparison, functional mercurial revision of code available on bitbucket.

the scrobblemedia method looks this, after refactoring:

#include "scrobblemedia.h"  #include <qdebug> #include <cstdio>  scrobblemedia::scrobblemedia(qstring asusername, qstring aspassword,                          qstring asartist, qstring astrack, qstring asalbum) {      qstring kendpointurl = "http://lastfmstats.livefrombmore.com/universalscrobbler/scrobble.php";     qurl iscrobbleendpoint(kendpointurl);        qnetworkaccessmanager *iscrobbledispatcher = new qnetworkaccessmanager(this);   iscrobbleendpoint.addqueryitem("submissiontype","track"); iscrobbleendpoint.addqueryitem("username", asusername); iscrobbleendpoint.addqueryitem("password", aspassword); iscrobbleendpoint.addqueryitem("artist", asartist); iscrobbleendpoint.addqueryitem("track", astrack); iscrobbleendpoint.addqueryitem("album", asalbum); iscrobbleendpoint.addqueryitem("number","1"); iscrobbleendpoint.addqueryitem("duration","200");  iscrobbledispatcher->get(qnetworkrequest(iscrobbleendpoint)); connect(iscrobbledispatcher, signal(finished(qnetworkreply*)),  slot(replyfinished(qnetworkreply*)));  // qstring outside = iscrobbleendpoint.toencoded();  qdebug()  << "received: " +    asusername + " " +     aspassword + " " +      asartist + " " +      astrack + " " +        asalbum;  qdebug() << iscrobbleendpoint.tostring();  }  scrobblemedia::~scrobblemedia() {  } 

the associated header file looks like:

#ifndef scrobblemedia_h #define scrobblemedia_h  #include <qstring> #include <qtnetwork> #include <qurl> #include <qnetworkaccessmanager>    class scrobblemedia : public qobject {      q_object;   private:  public:      scrobblemedia(qstring asusername, qstring aspassword, qstring asartist, qstring astrack, qstring asalbum);     ~scrobblemedia();  };  #endif // scrobblemedia_h 

i'm building application against mingw build of version 4.7.0 of qt libraries (included part of qt sdk 2010.05) under windows 7 x86-64.

any assistance appreciated.

thanks in advance.

after reading number of different sources of information (most of contradictory), i've found following results in working solution - albeit cosmetic issue in debugging output doesn't seem affect operation (object::connect: no such signal qnetworkreplyimpl::finished(qnetworkreply*) in ../audioplayer/scrobblemedia.cpp:29):

in scrobblemedia.cpp:

#include "scrobblemedia.h"  #include <qdebug> #include <cstdio>  scrobblemedia::scrobblemedia(qstring asusername, qstring aspassword,                              qstring asartist, qstring astrack, qstring asalbum) {      qbytearray idatasink;     qeventloop iloop;      qstring kendpointurl = "http://lastfmstats.livefrombmore.com/universalscrobbler/scrobble.php";     qurl iscrobbleendpoint(kendpointurl);      iscrobbleendpoint.addqueryitem("submissiontype","track");     iscrobbleendpoint.addqueryitem("username", asusername);     iscrobbleendpoint.addqueryitem("password", aspassword);     iscrobbleendpoint.addqueryitem("artist", asartist);     iscrobbleendpoint.addqueryitem("track", astrack);     iscrobbleendpoint.addqueryitem("album", asalbum);     iscrobbleendpoint.addqueryitem("number","1");     iscrobbleendpoint.addqueryitem("duration","200");      qnetworkaccessmanager iscrobbledispatcher;     qnetworkrequest iscrobblerequest(iscrobbleendpoint);     qnetworkreply *iscrobblereply = iscrobbledispatcher.get(iscrobblerequest);      qobject::connect(iscrobblereply, signal(finished(qnetworkreply*)), &iloop,      slot(quit()));      idatasink = iscrobblereply->readall();      qdebug()  << "received: " + asusername + " " + aspassword + " " + asartist + " " + astrack + " " + asalbum;      qdebug() << iscrobbleendpoint.tostring();      iloop.exec(); }  scrobblemedia::~scrobblemedia() {  }  void scrobblemedia::replyfinished(qnetworkreply*) {  }  void scrobblemedia::reallydone() {      qdebug() << "we've scrobbled..."; } 

in scrobblemedia.h:

#ifndef scrobblemedia_h #define scrobblemedia_h  #include <qstring> #include <qtnetwork> #include <qurl> #include <qnetworkaccessmanager>    class scrobblemedia : public qobject {      q_object   private:   public:      scrobblemedia(qstring asusername, qstring aspassword, qstring asartist, qstring astrack, qstring asalbum);     ~scrobblemedia();  private slots:     void replyfinished(qnetworkreply*);     void reallydone();  };  #endif // scrobblemedia_h 

thanks help.

hopefully code serve useful template others, in future.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -