Download Data from URL/bg

From Qt Wiki
Jump to navigation Jump to search


[toc align_right="yes" depth="2"]

Български English 한국어فارسی

Сваляне на данни от URL

Приложеният отрязък от код показва как се свалят данни като "QByteArray":http://doc.qt.io/qt-5.0/qtcore/qbytearray.html от URL (адрес на даден ресурс в Интернет или друга мрежа). Свалените данни могат да бъдат записани като файл или да бъдат преобразувани в подходящ обект. Така например, ако е свалена картинка, то тя може да бъде заредена от "QPixmap":http://doc.qt.io/qt-5.0/qtgui/qpixmap.html или "QImage":http://doc.qt.io/qt-5.0/qtgui/qimage.html чрез метода "loadFromData()":http://doc.qt.io/qt-5.0/qtgui/qimage.html#loadFromData-2

Моля, обърнете внимание, че приложения клас FileDownloader независимо от името си не запазва свалените данни на диска като файл!

Важни класове

.pro файл

<br />QT ''= network<br />


Ако целите съвместимост със Symbian устройства не забравяйте да добавите необходимите разрешения за ползване на мрежови услуги.


<br />symbian:TARGET.CAPABILITY''= NetworkServices<br />

filedownloader.h

<br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H

#include <QObject><br />#include <QByteArray><br />#include <QNetworkAccessManager><br />#include <QNetworkRequest><br />#include <QNetworkReply>

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

private:

QNetworkAccessManager m_WebCtrl;

QByteArray m_DownloadedData;

};

#endif // FILEDOWNLOADER_H<br />

filedownloader.cpp

<br />#include "filedownloader.h"

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

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

Употреба

Заредете QPixmap от URL

  • Декларирайте слот
<br />private slots:

void loadImage();<br />
  • Свържете сигнал downloaded() към слота
<br />QUrl imageUrl("http://qt.nokia.com/logo.png");<br />m_pImgCtrl = new FileDownloader(imageUrl, this);

connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br />
  • Заредете QPixmap от свалените данни


void MainWindow::loadImage()
{
QPixmap buttonImage;
buttonImage.loadFromData(m_pImgCtrl->downloadedData());
}