Download Data from URL/pt-PT
		
		
		
		
		
		Jump to navigation
		Jump to search
		
		
	
Introdução
O seguinte código snippet demonstra como transferir dados como QByteArray a partir do URL. Os dados transferidos podem ser guardados como um ficheiro ou convertido para o objeto apropriado. Por exemplo, se for transferida uma imagem, esta pode ser convertida para QPixmap ou QImage, utilizando o método loadFromData.
Por favor, note que embora o nome da classe é FileDownloader , os dados transferidos não são guardados no disco como ficheiro!
Classes Importantes
Ficheiro .pro
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;
}
Utilização
Carregar Pixmap do 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());
}