您似乎在滥用 QtNetwork API。您至少存在以下问题:
您将包含整个 QtNetwork 模块,而不是必要的类。
在发出 error() 信号之前调用 errorStrin()。这不好,您看到的是预期的,因为根据文档,默认状态是 UnknownError。
您没有连接到异步 API 的完成信号。返回的 QNetworkReply 只是一个指针,您可以稍后使用它来访问成员,但它还不包含此时的回复。
您正在实例化 QCoreApplication,但实际上并未使用它来运行事件循环,这是异步操作获取回复所必需的。您也可以随时阻止,但大多数情况下并不推荐这样做。
您在这里不必要地使用了 QNetworkAccessManager 的指针。
您正在使用宏大写字母作为常规变量名称。
您可以编写如下代码。将 lambda 与 C++11 一起使用会更简单,但我假设您需要让它与此类预编译器一起使用。
主文件
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QCoreApplication>
#include <QDebug>
#include <QUrl>
class Download : public QObject
{
Q_OBJECT
public:
explicit Download(QObject *parent = 0) : QObject (parent) {}
~Download() {}
public slots:
// void handleFinished() {}
void handleFinished(QNetworkReply* networkReply) { qDebug() << "Reply:" << networkReply->readAll(); QCoreApplication::quit(); }
void handleError(QNetworkReply::NetworkError code) { qDebug() << "Error:" << code; QCoreApplication::quit(); }
};
#include "main.moc"
int main(int argc, char **argv)
{
QCoreApplication a(argc, argv);
QNetworkAccessManager networkAccessManager;
networkAccessManager.setNetworkAccessible(QNetworkAccessManager::Accessible);
QNetworkRequest networkRequest;
networkRequest.setUrl(QUrl("http://test.com/test/rest/BOB"));
Download download;
// QObject::connect(&networkRequest, SIGNAL(finished()), &download, SLOT(handleFinished()));
QObject::connect(&networkAccessManager, SIGNAL(finished(QNetworkReply*)), &download, SLOT(handleFinished(QNetworkReply*)));
// QObject::connect(&networkRequest, SIGNAL(error(QNetworkReply::NetworkError)), &download, SLOT(handleError(QNetworkReply::NetworkError)));
networkAccessManager.get(networkRequest);
return a.exec();
}
主程序
TEMPLATE = app
TARGET = main
QT = core network
SOURCES += main.cpp
构建并运行
qmake && make