Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
Download Data from URL: Difference between revisions
Jump to navigation
Jump to search
Henri Vikki (talk | contribs) (Link fix) |
m (Improved code formatting) |
||
(3 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{LangSwitch}} | |||
[[Category:HowTo]] | [[Category:HowTo]] | ||
== Introduction == | == Introduction == | ||
The following code snippet demonstrates how to download data as | The following code snippet demonstrates how to download data as {{DocLink|QByteArray}} 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 {{DocLink|QPixmap}} or {{DocLink|QImage}} using method {{DocLink|QImage|loadFromData}}. | ||
Please note that although the name of the class is File''Downloader'' the downloaded data is not saved on the disk as file! | Please note that although the name of the class is File''Downloader'' the downloaded data is not saved on the disk as file! | ||
Line 20: | Line 18: | ||
<code> | <code> | ||
QT += network | QT += network | ||
</code> | </code> | ||
== filedownloader.h == | == filedownloader.h == | ||
#ifndef FILEDOWNLOADER_H | |||
#ifndef FILEDOWNLOADER_H | #define FILEDOWNLOADER_H | ||
#define FILEDOWNLOADER_H | |||
#include <QObject> | |||
#include <QObject> | #include <QByteArray> | ||
#include <QByteArray> | #include <QNetworkAccessManager> | ||
#include <QNetworkAccessManager> | #include <QNetworkRequest> | ||
#include <QNetworkRequest> | #include <QNetworkReply> | ||
#include <QNetworkReply> | |||
class FileDownloader : public QObject | |||
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 | ||
#endif // FILEDOWNLOADER_H | |||
== filedownloader.cpp == | == filedownloader.cpp == | ||
#include "filedownloader.h" | |||
#include "filedownloader.h" | |||
FileDownloader::FileDownloader(QUrl imageUrl, QObject *parent) : | |||
FileDownloader::FileDownloader(QUrl imageUrl, QObject *parent) : | QObject(parent) | ||
{ | |||
{ | connect( | ||
&m_WebCtrl, SIGNAL (finished(QNetworkReply*)), | |||
this, SLOT (fileDownloaded(QNetworkReply*)) | |||
); | ); | ||
QNetworkRequest request(imageUrl); | |||
m_WebCtrl.get(request); | |||
} | } | ||
FileDownloader::~FileDownloader() { } | FileDownloader::~FileDownloader() { } | ||
void FileDownloader::fileDownloaded(QNetworkReply* pReply) { | void FileDownloader::fileDownloaded(QNetworkReply* pReply) { | ||
m_DownloadedData = pReply->readAll(); | |||
//emit a signal | |||
pReply->deleteLater(); | |||
emit downloaded(); | |||
} | } | ||
QByteArray FileDownloader::downloadedData() const { | QByteArray FileDownloader::downloadedData() const { | ||
return m_DownloadedData; | |||
} | } | ||
== Usage == | == Usage == | ||
Line 99: | Line 86: | ||
Declare slot | Declare slot | ||
private slots: | |||
private slots: | void loadImage(); | ||
Connect signal '''downloaded()''' to the slot | Connect signal '''downloaded()''' to the slot | ||
QUrl imageUrl("http: //qt.digia.com/Documents/1/QtLogo.png"); | |||
QUrl imageUrl("http://qt.digia.com/Documents/1/QtLogo.png"); | m_pImgCtrl = new FileDownloader(imageUrl, this); | ||
m_pImgCtrl = new FileDownloader(imageUrl, this); | |||
connect(m_pImgCtrl, SIGNAL (downloaded()), this, SLOT (loadImage())); | |||
connect(m_pImgCtrl, SIGNAL (downloaded()), this, SLOT (loadImage())); | |||
Load QPixmap from the downloaded data | Load QPixmap from the downloaded data | ||
void MainWindow::loadImage() | |||
void MainWindow::loadImage() | { | ||
{ | QPixmap buttonImage; | ||
buttonImage.loadFromData(m_pImgCtrl->downloadedData()); | |||
} | |||
} | |||
Latest revision as of 12:21, 10 January 2021
Introduction
The following code snippet demonstrates how to download data as QByteArray 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 or QImage using method loadFromData.
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
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*)), this, 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()), this, SLOT (loadImage()));
Load QPixmap from the downloaded data
void MainWindow::loadImage() { QPixmap buttonImage; buttonImage.loadFromData(m_pImgCtrl->downloadedData()); }