2012-02-16 64 views
1

我真的很喜欢C++(正如我以前的文章中提到的),但是我的朋友建议我使用QNetworkAccessManager,如果我想发送HTTP GET请求来发送信息。C++与openGL结合的QNetworkAccessManager(Qt)

我目前用OpenGL-ES工作,但需要做的代码如下两行发送GET请求:

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

但是,它不喜欢的“本”,因为它是在main()方法,它不引用QObject(我猜QApplication)。当我摆脱“这个”我的应用程序构建,但只是从来没有加载(我把一个“printf(1)”,甚至没有运行的顶部)。

有关如何解决此问题的任何建议或备选方案?提前致谢。

- 詹姆斯

回答

1

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; 
}