2016-05-17 13 views
0

Я встретил странную проблему, и я искал несколько часов, но не могу найти решение.Qt QNetworkAccessManager всегда возвращает пустые данные, а код состояния 0

Я использую Qt для записи рабочего стола Windows, и я хочу загрузить файл из Интернета, поэтому я использую QNetworkAccessManager. Ниже мой тестовый код, который находится в конструкторе MainWindow в:

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 

I Я уверен, что www.example.org можно получить на моей машине и есть нет перенаправления. Код состояния HTTP равен 0, даже мой компьютер отключен от Интернета. Проблема все еще происходит в новом проекте, поэтому проблема не только этого проекта.

Мой Qt версии: Qt 5.5.1 (MSVC 2013, 32 бит)

Компилятор: GCC версии 5.1.0 (ТДМ-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(); 
} 
+1

Try для обработки ошибок ... –

+0

Спасибо. Я нашел проблему. Я должен использовать «http://www.example.org», а не «www.exmaple.org» ... – shell32

ответ

1

Перед вызовом функции QNetworkAccessManager::get() вы должны подключить его к слоту.

QNetworkRequest request; 
request.setUrl(QUrl("www.example.org"));  
QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)),this,SLOT(connFinished(QNetworkReply*))); 
manager->get(request); 
+0

Хммм, я изменил код. Но результат не изменился. :-( – shell32

0

Хорошо, я нашел, где проблема. Я должен использовать http://www.exmaple.org, а не www.example.org, иначе QNAM сообщит об ошибке ProtocolUnknownError. Я предположил, что QNAM угадает тип протокола. Но, к сожалению, этого не произойдет.

0

Если вы используете протокол https в своем URL-адресе, вы должны добавить следующие файлы dll рядом с исполняемым файлом.

libeay32.dll ssleay32.dll

 Смежные вопросы

  • Нет связанных вопросов^_^