Download Data from URL/ru: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Created page with "{{LangSwitch}} Category:HowTo == Вступление == Следующий фрагмент кода показывает, как загрузить данные как...")
 
(convert {{doclinkanchor}} to the improved {{doclink}})
 
Line 3: Line 3:
== Вступление ==
== Вступление ==


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


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

Latest revision as of 12:38, 21 October 2015

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Вступление

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

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

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

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