Download Data from URL/bg: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:snippets]]<br />[[Category:HowTo]] | [[Category:snippets]]<br />[[Category:HowTo]] | ||
[toc align_right= | [toc align_right="yes" depth="2"] | ||
'''Български''' [[Download_Data_from_URL|English]] [[Download_Data_from_URL_Korean|한국어]][[Download_Data_from_URL_Persian|فارسی]] | '''Български''' [[Download_Data_from_URL|English]] [[Download_Data_from_URL_Korean|한국어]][[Download_Data_from_URL_Persian|فارسی]] | ||
Line 7: | Line 7: | ||
= Сваляне на данни от URL = | = Сваляне на данни от 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 независимо от името си не запазва свалените данни на диска като файл! | Моля, обърнете внимание, че приложения клас FileDownloader независимо от името си не запазва свалените данни на диска като файл! | ||
Line 13: | Line 13: | ||
== Важни класове == | == Важни класове == | ||
* | * "QNetworkAccessManager":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html | ||
* | * "QNetworkRequest":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html | ||
* | * "QNetworkReply":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html | ||
* | * "QUrl":http://doc.qt.io/qt-5.0/qtcore/qurl.html | ||
== .pro файл == | == .pro файл == | ||
Line 28: | Line 28: | ||
<code><br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H | <code><br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H | ||
#include | #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); | class FileDownloader : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit FileDownloader(QUrl imageUrl, QObject '''parent = 0); | ||
Line 49: | Line 49: | ||
== filedownloader.cpp == | == filedownloader.cpp == | ||
<code><br />#include | <code><br />#include "filedownloader.h" | ||
FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :<br /> QObject(parent)<br />{<br /> connect(&m_WebCtrl, SIGNAL (finished(QNetworkReply*)),<br /> SLOT (fileDownloaded(QNetworkReply*))); | FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :<br /> QObject(parent)<br />{<br /> connect(&m_WebCtrl, SIGNAL (finished(QNetworkReply*)),<br /> SLOT (fileDownloaded(QNetworkReply*))); | ||
Line 55: | Line 55: | ||
<br />FileDownloader::~FileDownloader()<br />{ | <br />FileDownloader::~FileDownloader()<br />{ | ||
<br />} | <br />} | ||
<br />void FileDownloader::fileDownloaded(QNetworkReply''' pReply)<br />{<br /> m_DownloadedData = pReply- | <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 /></code> | QByteArray FileDownloader::downloadedData() const<br />{<br /> return m_DownloadedData;<br />}<br /></code> | ||
Line 71: | Line 71: | ||
* Свържете сигнал '''downloaded()''' към слота | * Свържете сигнал '''downloaded()''' към слота | ||
<code><br />QUrl imageUrl( | <code><br />QUrl imageUrl("http://qt.nokia.com/logo.png");<br />m_pImgCtrl = new FileDownloader(imageUrl, this); | ||
connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br /></code> | connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br /></code> | ||
Line 77: | Line 77: | ||
* Заредете QPixmap от свалените данни | * Заредете QPixmap от свалените данни | ||
<code><br />void MainWindow::loadImage()<br />{<br /> QPixmap buttonImage;<br /> buttonImage.loadFromData(m_pImgCtrl- | <code><br />void MainWindow::loadImage()<br />{<br /> QPixmap buttonImage;<br /> buttonImage.loadFromData(m_pImgCtrl->downloadedData());<br />} |
Revision as of 14:44, 24 February 2015
[toc align_right="yes" depth="2"]
Сваляне на данни от 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 независимо от името си не запазва свалените данни на диска като файл!
Важни класове
- "QNetworkAccessManager":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html
- "QNetworkRequest":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html
- "QNetworkReply":http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html
- "QUrl":http://doc.qt.io/qt-5.0/qtcore/qurl.html
.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(&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());
}