MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Qt: Скачивание данных по HTTP (пример)
20.03.2016
22:41
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - Работа с сетью

Вступление

Следующий фрагмент кода показывает, как загрузить данные как QByteArray по ссылке. Загруженные данные могут быть сохранены как файл или могуть бы преобразованы в соответствующий обьект. Например если загружено изображение, его можно преобразовать в QPixmap или QImage используя метод loadFromData.

Пожалуйста обратите внимание, что хотя имя класса FileDownloader, загруженные данные не сохраняются на диск!


Важные классы

  • QNetworkAccessManager
  • QNetworkRequest
  • QNetworkReply
  • QUrl


Файл .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;

}


Использование

Загрузка данных по ссылке

Объявим слот

private slots:

void loadImage();

Соеденим сигнал downloaded() со слотом

QUrl imageUrl("http://qt.digia.com/Documents/1/QtLogo.png");

m_pImgCtrl = new FileDownloader(imageUrl, this);

 

connect(m_pImgCtrl, SIGNAL (downloaded()), this, SLOT (loadImage()));

Загрузим изображение из загруженной информации.

void MainWindow::loadImage()

{

QPixmap buttonImage;

buttonImage.loadFromData(m_pImgCtrl->downloadedData());

}


← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования