QHttp를 사용하여 네트워크 파일을 다운로드하는 간단한 예

3120 단어 qtQHttp
장면:
1 소프트웨어 업데이트로 사용할 수 있습니다.
2 파일 다운로드 서버
참고:
      1 *.pro QT +=network 추가
2 VS 아래 링크 --- 추가 종속성 --입력 --- QtNetworkd4 추가.lib 또는 QtNetwork4.lib, debug와release에 따라 선택하십시오.
3 exe 디렉토리 복제 QtNetworkd4.dll 또는 QtNetwork4.dll, debug와release에 따라 선택하십시오.
4 네트워크 환경은 비 프록시에서 사용되며, 그렇지 않으면 프로그램이 프록시를 설정하고 QNetwork Proxy 클래스를 사용해야 한다
1 http_get.h
#ifndef HTTP_GET_H
#define HTTP_GET_H
#include <QObject>
#include <QtCore>
#include <QtGui>
#include <QtNetwork/QtNetwork>
#include <QtNetwork/QHttp>
#include <iostream>
#include <stdio.h>
#include <QUrl>
#include <QWidget>
#include <QFile>
#include <QTextStream>
#include <QNetworkAccessManager>
#include <QTextCodec>

using namespace std;

class HttpGet : public QObject
{
    Q_OBJECT
public:
    explicit HttpGet(QObject *parent = 0);
    bool getFile(const QUrl &url);
signals:
    void done();
public slots:
    void httpDone(bool error);
 private:
    QHttp http;
    QFile file;
};

#endif // HTTP_GET_H
2 http_get.cpp
#include "http_get.h"

HttpGet::HttpGet(QObject *parent) :QObject(parent)
{
    connect(&http,SIGNAL(done(bool)),this,SLOT(httpDone(bool)));
}
bool HttpGet::getFile(const QUrl &url)
{
    if(!url.isValid())
    {
         std::cerr<<"error: Invalid URL!" <<endl;
         return false;
    }
    if(url.scheme() != "http")
    {
        std::cerr<<"error: URL must start with 'http:'" <<endl;
        return false;
    }
    if(url.path().isEmpty())
    {
        std::cerr<<"error: URL has no path!" <<endl;
        return false;
    }
    QFileInfo fileInfo(url.path());
    QString localFileName = fileInfo.fileName();
    if(localFileName.isEmpty())
    {
        localFileName = "http.out";
    }
    file.setFileName(localFileName);
    if(!file.open((QIODevice::WriteOnly)))
    {
        std::cerr<<"error: Cannot write file" <<":"<<qPrintable(file.fileName())<<": "<<qPrintable(file.errorString())<<endl;
        return false;
    }
    http.setHost(url.host(),url.port(80));//  
    http.get(url.path(),&file);
    http.close();

    return true;
}
void HttpGet::httpDone(bool error)
{
    if(error)
    {
        std::cerr<<"error:"<<qPrintable(http.errorString())<<endl;
    }
    else
    {
        std::cerr<<"file download as "<<qPrintable(file.fileName())<<endl;
    }
    file.close();
    emit done();<span style="color:#cc0000;">//  </span>
}

3 main.cpp
#include <QtGui/QApplication>
#include "http_get.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
	 HttpGet getter;
	 QString str("http://www.istonsoft.com/win-update.xml");
	 QUrl url(str);
     getter.getFile(url);
  
    return a.exec();
}

좋은 웹페이지 즐겨찾기