1

私は本当に C++ に慣れていませんが (以前の投稿で述べたように)、情報を送信するために HTTP GET 要求を送信したい場合は、QNetworkAccessManager を使用することを友人から勧められました。

私は現在openGL-esを使用しており、getリクエストを送信するために次の2行のコードを実行したいと考えています:

QNetworkAccessManager* netMan = new QNetworkAccessManager(this);
netMan->get(QNetworkRequest(QUrl("something/?userID=1")));

ただし、「this」は main() メソッドにあり、QObject を参照しないため (QApplication と推測しています)、好きではありません。「this」を削除すると、アプリケーションがビルドされますが、ロードされません (「printf(1)」を一番上に置いても実行されません)。

これを修正する方法に関する提案や代替案はありますか? 前もって感謝します。

-ジェームズ

4

1 に答える 1

1

コンストラクターのパラメーターは、後でオブジェクトをクリーンアップ (削除) するベースの親をQNetworkAccessManager指定するためにのみ必要であり、自分で呼び出す予定がある場合は必要ありません。QObjectdelete

「ロードしない」という言葉が何を指しているのか、または a をどこに置いたのかはよくわかりませんが、何かを元に戻すには、への呼び出しによって返されるポインターprintfを実際に保持する必要があります。QNetworkReplyget()

そこから何かを取得するには、イベント ループを実行する必要があります。アプリケーションがコンソールのみ (GUI なし) の場合は、QCoreApplicationオブジェクトを使用できます。

この最小限のコードを試してください:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QNetworkAccessManager *netMan = new QNetworkAccessManager();
    QNetworkReply *reply = netMan->get(QNetworkRequest(QUrl("http://google.com")));
    a.connect(reply, SIGNAL(finished()), SLOT(quit()));
    a.exec();
    qDebug() << reply->readAll();
    delete netMan;
}
于 2012-02-16T23:06:52.170 に答える