Download Data from URL/ko
Jump to navigation
Jump to search
[toc align_right="yes" depth="2"]
URL에서 데이터 다운로드받기
아래 코드는 어떻게 하면 "URL":http://ko.wikipedia.org/wiki/URL 로부터 자료를 다운로드 받아 "QByteArray":http://doc.qt.io/qt-5.0/qtcore/qbytearray.html 에 저장할 수 있는지를 보여주고 있습니다. 다운로드된 자료는 파일로 저장할 수도 있고, 적절한 객체(object)의 형태로 전환(convert)할 수도 있습니다. 예를 들어, 만약 그림을 다운로드하였다면, 이를 각각 객체의 "loadFromData()":http://doc.qt.io/qt-5.0/qtgui/qimage.html#loadFromData-2 메서드를 이용하여 "QPixmap":http://doc.qt.io/qt-5.0/qtgui/qpixmap.html 혹은 "QImage":http://doc.qt.io/qt-5.0/qtgui/qimage.html 로 전환할 수 있습니다.
예제 클래스 "FileDownloader"의 이름이 'File-Downloader'이지만, 실제 다운로드된 데이터를 파일로 저장하지는 않습니다. (역자 주: 물론 method를 추가하면 저장할 수 있습니다)
주요 클래스
- "QNetworkAccessManager":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html
- "QNetworkRequest":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html
- "QNetworkReply":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html
- "QUrl":http://doc.qt.io/qt-5.0/qtcore/qurl.html
.pro 파일
QT ''= network
만약 심비안(Symbian) 장치에 네트워크 기능을 추가하려면 다음 코드를 추가해야 합니다.
symbian:TARGET.CAPABILITY''= NetworkServices
filedownloader.h
#ifndef FILEDOWNLOADER_H
#define FILEDOWNLOADER_H
#include <QObject>
#include <QByteArray>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
class FileDownloader : public QObject
{
Q_OBJECT
public:
explicit FileDownloader(QUrl imageUrl, QObject '''parent = 0);
virtual ~FileDownloader();
QByteArray downloadedData() const;
signals:
void downloaded();
private slots:
void fileDownloaded(QNetworkReply''' pReply);
private:
QNetworkAccessManager m_WebCtrl;
QByteArray m_DownloadedData;
};
#endif // FILEDOWNLOADER_H
filedownloader.cpp
#include "filedownloader.h"
FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :
QObject(parent)
{
connect(&m_WebCtrl, SIGNAL (finished(QNetworkReply*)),
SLOT (fileDownloaded(QNetworkReply*)));
QNetworkRequest request(imageUrl);
m_WebCtrl.get(request);
}
FileDownloader::~FileDownloader()
{
}
void FileDownloader::fileDownloaded(QNetworkReply''' pReply)
{
m_DownloadedData = pReply->readAll();
//emit a signal
pReply->deleteLater()
emit downloaded();
}
QByteArray FileDownloader::downloadedData() const
{
return m_DownloadedData;
}
사용법
URL에서 Pixmap 불러오기
- 슬롯 선언하기
private slots:
void loadImage();
- 시그널 *downloaded()를 슬롯에 연결하기
QUrl imageUrl("http://qt.nokia.com/logo.png");
m_pImgCtrl = new FileDownloader(imageUrl, this);
connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));
다운로드된 데이터에서 QPixmap 읽어들이기
void MainWindow::loadImage()
{
QPixmap buttonImage;
buttonImage.loadFromData(m_pImgCtrl->downloadedData());
}