1

我真的不喜欢 C++(正如我之前的帖子所提到的),但是我的朋友建议我使用 QNetworkAccessManager 如果我想发送一个 HTTP GET 请求来发送信息。

我目前正在使用 openGL-es 并希望执行以下两行代码来发送 get 请求:

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

但是,它不喜欢“this”,因为它在 main() 方法中并且没有引用 QObject(我猜是 QApplication)。当我摆脱“this”时,我的应用程序构建,但从未加载(我在顶部放置了一个“printf(1)”,它甚至没有运行)。

有关如何解决此问题的任何建议或替代方法?提前致谢。

-詹姆士

4

1 回答 1

1

构造函数中的参数QNetworkAccessManager只需要指定一个QObject基于父级的父级,它将负责稍后清理(删除)您的对象,如果您打算自己调用delete它,则不需要。

我不太确定“从不加载”指的是什么,或者你把 a 放在哪里,printf但为了取回任何东西,你实际上需要保留QNetworkReply调用返回的指针get()

要从中获得任何东西,您需要运行一个事件循环。如果您的应用程序仅是控制台(无 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 回答