我遇到了一個奇怪的問題,我搜索了幾個小時,但找不到解決方案。Qt QNetworkAccessManager總是返回空數據,狀態碼爲0
我使用Qt編寫Windows桌面應用程序,我想從互聯網下載文件,因此我使用QNetworkAccessManager
。以下是我的測試代碼,這是在主窗口的構造函數:
QNetworkRequest request;
request.setUrl(QUrl("www.example.org"));
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
if(manager->networkAccessible() == QNetworkAccessManager::Accessible){
qDebug() << "Network accessible";
}
else{
qDebug() << "Network is not accessible";
}
manager->get(request);
connect(manager, manager->finished, this, connFinished);
而接下來就是connFinished
功能:
void MainWindow::connFinished(QNetworkReply *r){
int statusCode = r->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << statusCode;
}
運行代碼後,輸出的是:
Network accessible
0
我確定www.example.org
可以在我的機器上訪問,並有沒有重定向。即使我的電腦已斷開與Internet的連接,HTTP狀態碼也爲0。問題仍然發生在一個新項目中,所以這不僅是該項目的問題。
我的Qt版本的:Qt 5.5.1(MSVC 2013年,32位)
編譯:gcc版本5.1.0(TDM-1)
有沒有人知道爲什麼會這樣?謝謝!
項目文件和代碼:
test.pro
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void connFinished(QNetworkReply *r);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QNetworkRequest request;
request.setUrl(QUrl("www.example.org"));
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
if(manager->networkAccessible() == QNetworkAccessManager::Accessible){
qDebug() << "Network accessible";
}
else{
qDebug() << "Network is not accessible";
}
manager->get(request);
connect(manager, manager->finished, this, connFinished);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::connFinished(QNetworkReply *r){
int statusCode = r->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << statusCode;
}
的main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
試圖處理錯誤... –
謝謝。我發現了這個問題。我必須使用「http://www.example.org」而不是「www.exmaple.org」...... – shell32