私は最近、約2ヶ月前に書いた大きなモノリシックのオーディオプレーヤーアプリケーションをモジュール化するという面倒なプロセスを開始しました。スタンドアロンクラスにリファクタリングした後、QNetworkRequest(HTTP GET)が起動しない
このプロセスは、ScrobbleMedia(再生可能なトラックに関する情報をlast.fmに提出するというHTTP要求を予測するほどには十分ではない)が、もはやネットワーク要求をしていないように見えます。
ただし、QNetworkAccessManagerインスタンス/ QNetworkRequestに渡されるQUrlオブジェクトは正しく構築されています。
比較のため、コードの機能的なMercurialリビジョンはBitBucketにあります。
ScrobbleMedia方法は、現在、リファクタリングした後、次のようになります。
#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() {
}
関連するヘッダファイルは以下のようになります。私は、現在のバージョンのMinGWのビルドに対するアプリケーション自体を構築しています
#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
Windows 7 x86-64でのQtライブラリ(Qt SDK 2010.05の一部として含まれています)4.7.0。
ご協力いただければ幸いです。
ありがとうございます。
2つの質問:なぜQ_OBJECTマクロの後にセミコロンがあるのですか?ヘッダーにreplyFinished()スロットが宣言されていないのはなぜですか? Windowsの場合は、CONFIG + = console qmakeオプションを使用してプロジェクトを再コンパイルしてください。実行時のQt警告(「no such slot」メッセージなど)が表示されます。 –
ありがとう、セルゲイ。私は今夜コードを更新し、何が起こったのかを教えてくれます(Qtのツールチェインが現時点では便利ではないため)。セミコロンは習慣的で、違いを生むかどうかは分かりませんでした。 – Tyson
@Tyson、またあなたのQt SDKのバージョンを提供する必要があります。古いバージョンのQtではQNAMとfinished()シグナルに多くの問題があります。 – Johnny