English Български 한국어

URL에서 데이터 다운로드받기

아래 코드는 어떻게 하면 URL [ko.wikipedia.org] 로부터 자료를 다운로드 받아 QByteArray [doc.trolltech.com] 에 저장할 수 있는지를 보여주고 있습니다.
다운로드된 자료는 파일로 저장할 수도 있고, 적절한 객체(object)의 형태로 전환(convert)할 수도 있습니다. 예를 들어, 만약 그림을 다운로드하였다면, 이를 각각 객체의 loadFromData() [doc.qt.nokia.com] 메서드를 이용하여 QPixmap [doc.qt.nokia.com] 혹은 QImage [doc.qt.nokia.com] 로 전환할 수 있습니다.

예제 클래스 “FileDownloader“의 이름이 ‘File-Downloader’이지만, 실제 다운로드된 데이터를 파일로 저장하지는 않습니다. (역자 주: 물론 method를 추가하면 저장할 수 있습니다)

주요 클래스

.pro 파일

  1. QT += network

만약 심비안(Symbian) 장치에 네트워크 기능을 추가하려면 다음 코드를 추가해야 합니다.

  1. symbian:TARGET.CAPABILITY += NetworkServices

filedownloader.h

  1. #ifndef FILEDOWNLOADER_H
  2. #define FILEDOWNLOADER_H
  3.  
  4. #include <QObject>
  5. #include <QByteArray>
  6. #include <QNetworkAccessManager>
  7. #include <QNetworkRequest>
  8. #include <QNetworkReply>
  9.  
  10. class FileDownloader : public QObject
  11. {
  12.     Q_OBJECT
  13. public:
  14.     explicit FileDownloader(QUrl imageUrl, QObject *parent = 0);
  15.  
  16.     virtual ~FileDownloader();
  17.  
  18.     QByteArray downloadedData() const;
  19.  
  20. signals:
  21.         void downloaded();
  22.  
  23. private slots:
  24.  
  25.     void fileDownloaded(QNetworkReply* pReply);
  26.  
  27. private:
  28.  
  29.     QNetworkAccessManager m_WebCtrl;
  30.  
  31.     QByteArray m_DownloadedData;
  32.  
  33. };
  34.  
  35. #endif // FILEDOWNLOADER_H

filedownloader.cpp

  1. #include "filedownloader.h"
  2.  
  3. FileDownloader::FileDownloader(QUrl imageUrl, QObject *parent) :
  4.     QObject(parent)
  5. {
  6.     connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)),
  7.                 SLOT(fileDownloaded(QNetworkReply*)));
  8.  
  9.     QNetworkRequest request(imageUrl);
  10.     m_WebCtrl.get(request);
  11. }
  12.  
  13. FileDownloader::~FileDownloader()
  14. {
  15.  
  16. }
  17.  
  18. void FileDownloader::fileDownloaded(QNetworkReply* pReply)
  19. {
  20.     m_DownloadedData = pReply->readAll();
  21.     //emit a signal
  22.     emit downloaded();
  23. }
  24.  
  25. QByteArray FileDownloader::downloadedData() const
  26. {
  27.     return m_DownloadedData;
  28. }

사용법

URL에서 Pixmap 불러오기

  • 슬롯 선언하기

  1. private slots:
  2.  
  3.     void loadImage();

  • 시그널 *downloaded()*를 슬롯에 연결하기

  1. QUrl imageUrl("http://qt.nokia.com/logo.png");
  2. m_pImgCtrl = new FileDownloader(imageUrl, this);
  3.  
  4. connect(m_pImgCtrl, SIGNAL(downloaded()), SLOT(loadImage()));

  • 다운로드된 데이터에서 QPixmap 읽어들이기

  1. void MainWindow::loadImage()
  2. {
  3.     QPixmap buttonImage;
  4.     buttonImage.loadFromData(m_pImgCtrl->downloadedData());
  5. }

Categories: