C++QNetworkAccessManager(Qt)与openGL结合使用

C++ QNetworkAccessManager (Qt) in conjunction with openGL

本文关键字:结合 openGL Qt C++QNetworkAccessManager      更新时间:2023-10-16

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

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

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

然而,它不喜欢"this",因为它在main()方法中,并且不引用QObject(我猜是QApplication)。当我去掉"this"时,我的应用程序会构建,但永远不会加载(我在顶部放了一个"printf(1)",它甚至不会运行)。

关于如何解决这个问题,有什么建议或替代方案吗?提前谢谢。

-James

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

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

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