QHttp를 사용하여 네트워크 파일을 다운로드하는 간단한 예
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();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt How to use connect between incompatible signal and slotIn this I want to call a function, that function will receive a point . But this function should be invoked by a timer's...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.