Download Data from URL: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:snippets]]<br />[[Category:HowTo]]
[[Category:snippets]]
[[Category:HowTo]]


[toc align_right=&quot;yes&amp;quot; depth=&quot;2&amp;quot;]
[toc align_right="yes" depth="2"]


'''English''' [[Download_Data_from_URL_Bulgarian|Български]] [[Download_Data_from_URL_Korean|한국어]][[Download_Data_from_URL_Persian|فارسی]]
'''English''' [[Download_Data_from_URL_Bulgarian|Български]] [[Download_Data_from_URL_Korean|한국어]][[Download_Data_from_URL_Persian|فارسی]]
Line 7: Line 8:
= Download Data from URL =
= Download Data from URL =


The following code snippet demonstrates how to download data as &quot;QByteArray&amp;quot;: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 &quot;QPixmap&amp;quot;:http://doc.qt.io/qt-5.0/qtgui/qpixmap.html or &quot;QImage&amp;quot;:http://doc.qt.io/qt-5.0/qtgui/qimage.html using method &quot;loadFromData()&quot;:http://doc.qt.io/qt-5.0/qtgui/qimage.html#loadFromData-2
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!
Please note that although the name of the class is FileDownloader the downloaded data is not saved on the disk as file!
Line 13: Line 14:
== Important Classes ==
== Important Classes ==


* &quot;QNetworkAccessManager&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html
* "QNetworkAccessManager":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html
* &quot;QNetworkRequest&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html
* "QNetworkRequest":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html
* &quot;QNetworkReply&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html
* "QNetworkReply":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html
* &quot;QUrl&amp;quot;:http://doc.qt.io/qt-5.0/qtcore/qurl.html
* "QUrl":http://doc.qt.io/qt-5.0/qtcore/qurl.html


== .pro File ==
== .pro File ==


<code><br />QT ''= network<br /></code>
<code>
<br />If you are targeting Symbian devices remember to add the capability for network services.
QT ''= network
<br /><code><br />symbian:TARGET.CAPABILITY''= NetworkServices<br /></code>
</code>
 
If you are targeting Symbian devices remember to add the capability for network services.
 
<code>
symbian:TARGET.CAPABILITY''= NetworkServices
</code>


== filedownloader.h ==
== filedownloader.h ==


<code><br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H
<code>
#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);


#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;
virtual ~FileDownloader();


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


private:
private:
Line 45: Line 68:
};
};


#endif // FILEDOWNLOADER_H<br /></code>
#endif // FILEDOWNLOADER_H
</code>


== filedownloader.cpp ==
== filedownloader.cpp ==


<code><br />#include &quot;filedownloader.h&amp;quot;
<code>
#include "filedownloader.h"
 
FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :
QObject(parent)
{
connect(&amp;m_WebCtrl, SIGNAL (finished(QNetworkReply*)),
SLOT (fileDownloaded(QNetworkReply*)));
 
QNetworkRequest request(imageUrl);
m_WebCtrl.get(request);
}
 
FileDownloader::~FileDownloader()
{
 
}


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


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


= Usage =
= Usage =
Line 65: Line 111:
* Declare slot
* Declare slot


<code><br />private slots:
<code>
private slots:


void loadImage();<br /></code>
void loadImage();
</code>


* Connect signal '''downloaded()''' to the slot
* Connect signal '''downloaded()''' to the slot


<code><br />QUrl imageUrl(&quot;http://qt.digia.com/Documents/1/QtLogo.png&amp;quot;);<br />m_pImgCtrl = new FileDownloader(imageUrl, this);
<code>
QUrl imageUrl("http://qt.digia.com/Documents/1/QtLogo.png");
m_pImgCtrl = new FileDownloader(imageUrl, this);


connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br /></code>
connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));
</code>


* Load QPixmap from the downloaded data
* Load QPixmap from the downloaded data


<code><br />void MainWindow::loadImage()<br />{<br /> QPixmap buttonImage;<br /> buttonImage.loadFromData(m_pImgCtrl-&gt;downloadedData());<br />}<br /></code>
<code>
void MainWindow::loadImage()
{
QPixmap buttonImage;
buttonImage.loadFromData(m_pImgCtrl->downloadedData());
}
</code>

Revision as of 08:41, 25 February 2015


[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

QT ''= network

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

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(&amp;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;
}

Usage

Load Pixmap from URL

  • Declare slot
private slots:

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

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