Download Data from URL

From Qt Wiki
Revision as of 14:17, 23 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search


[toc align_right="yes" depth="2"]

English Български 한국어فارسی

Download Data from URL

The following code snippet demonstrates how to download data as "QByteArray":http://doc.qt.io/qt-5.0/qtcore/qbytearray.html from URL. The downloaded data can be saved as a file or converted to appropriate object. For example if an image is downloaded it can be converted to "QPixmap":http://doc.qt.io/qt-5.0/qtgui/qpixmap.html or "QImage":http://doc.qt.io/qt-5.0/qtgui/qimage.html using method "loadFromData()":http://doc.qt.io/qt-5.0/qtgui/qimage.html#loadFromData-2

Please note that although the name of the class is FileDownloader the downloaded data is not saved on the disk as file!

Important Classes

.pro File

<br />QT ''= network<br />


If you are targeting Symbian devices remember to add the capability for network services.


<br />symbian:TARGET.CAPABILITY''= NetworkServices<br />

filedownloader.h

<br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H

#include &lt;QObject&amp;gt;<br />#include &lt;QByteArray&amp;gt;<br />#include &lt;QNetworkAccessManager&amp;gt;<br />#include &lt;QNetworkRequest&amp;gt;<br />#include &lt;QNetworkReply&amp;gt;

class FileDownloader : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit FileDownloader(QUrl imageUrl, QObject '''parent = 0);
<br /> virtual ~FileDownloader();
<br /> QByteArray downloadedData() const;
<br />signals:<br /> void downloaded();
<br />private slots:
<br /> void fileDownloaded(QNetworkReply''' pReply);

private:

QNetworkAccessManager m_WebCtrl;

QByteArray m_DownloadedData;

};

#endif // FILEDOWNLOADER_H<br />

filedownloader.cpp

<br />#include &quot;filedownloader.h&amp;quot;

FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :<br /> QObject(parent)<br />{<br /> connect(&amp;m_WebCtrl, SIGNAL (finished(QNetworkReply*)),<br /> SLOT (fileDownloaded(QNetworkReply*)));
<br /> QNetworkRequest request(imageUrl);<br /> m_WebCtrl.get(request);<br />}
<br />FileDownloader::~FileDownloader()<br />{
<br />}
<br />void FileDownloader::fileDownloaded(QNetworkReply''' pReply)<br />{<br /> m_DownloadedData = pReply-&gt;readAll();<br /> //emit a signal<br /> pReply-&gt;deleteLater();<br /> emit downloaded();<br />}

QByteArray FileDownloader::downloadedData() const<br />{<br /> return m_DownloadedData;<br />}<br />

Usage

Load Pixmap from URL

  • Declare slot
<br />private slots:

void loadImage();<br />
  • Connect signal downloaded() to the slot
<br />QUrl imageUrl(&quot;http://qt.digia.com/Documents/1/QtLogo.png&amp;quot;);<br />m_pImgCtrl = new FileDownloader(imageUrl, this);

connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br />
  • Load QPixmap from the downloaded data
<br />void MainWindow::loadImage()<br />{<br /> QPixmap buttonImage;<br /> buttonImage.loadFromData(m_pImgCtrl-&gt;downloadedData());<br />}<br />