Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Download Data from URL/bg: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Decode HTML entity names)
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:snippets]]<br />[[Category:HowTo]]
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}


[toc align_right=&quot;yes&amp;quot; depth=&quot;2&amp;quot;]
[[Category:HowTo]]


'''Български''' [[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|فارسی]]


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


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


* &quot;QNetworkAccessManager&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html
* [http://doc.qt.io/qt-5.0/qtnetwork/qnetworkaccessmanager.html QNetworkAccessManager]
* &quot;QNetworkRequest&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html
* [http://doc.qt.io/qt-5.0/qtnetwork/qnetworkrequest.html QNetworkRequest]
* &quot;QNetworkReply&amp;quot;:http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html
* [http://doc.qt.io/qt-5.0/qtnetwork/qnetworkreply.html QNetworkReply]
* &quot;QUrl&amp;quot;:http://doc.qt.io/qt-5.0/qtcore/qurl.html
* [http://doc.qt.io/qt-5.0/qtcore/qurl.html QUrl]


== .pro файл ==
== .pro файл ==


<code><br />QT ''= network<br /></code>
<code>
<br />Ако целите съвместимост със Symbian устройства не забравяйте да добавите необходимите разрешения за ползване на мрежови услуги.
QT ''= network
<br /><code><br />symbian:TARGET.CAPABILITY''= NetworkServices<br /></code>
</code>
 
Ако целите съвместимост със Symbian устройства не забравяйте да добавите необходимите разрешения за ползване на мрежови услуги.
 
<code>
symbian:TARGET.CAPABILITY''= NetworkServices
</code>


== filedownloader.h ==
== filedownloader.h ==


<code><br />#ifndef FILEDOWNLOADER_H<br />#define FILEDOWNLOADER_H
<code>
#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;


#include &lt;QObject&amp;gt;<br />#include &lt;QByteArray&amp;gt;<br />#include &lt;QNetworkAccessManager&amp;gt;<br />#include &lt;QNetworkRequest&amp;gt;<br />#include &lt;QNetworkReply&amp;gt;
signals:
void downloaded();


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


private:
private:
Line 45: Line 65:
};
};


#endif // FILEDOWNLOADER_H<br /></code>
#endif // FILEDOWNLOADER_H
</code>


== filedownloader.cpp ==
== filedownloader.cpp ==


<code><br />#include &quot;filedownloader.h&amp;quot;
<code>
#include "filedownloader.h"
 
FileDownloader::FileDownloader(QUrl imageUrl, QObject '''parent) :
QObject(parent)
{
connect(&m_WebCtrl, SIGNAL (finished(QNetworkReply*)),
SLOT (fileDownloaded(QNetworkReply*)));
 
QNetworkRequest request(imageUrl);
m_WebCtrl.get(request);
}
 
FileDownloader::~FileDownloader()
{
 
}


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


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


= Употреба =
= Употреба =
Line 65: Line 108:
* Декларирайте слот
* Декларирайте слот


<code><br />private slots:
<code>
private slots:


void loadImage();<br /></code>
void loadImage();
</code>


* Свържете сигнал '''downloaded()''' към слота
* Свържете сигнал '''downloaded()''' към слота


<code><br />QUrl imageUrl(&quot;http://qt.nokia.com/logo.png&amp;quot;);<br />m_pImgCtrl = new FileDownloader(imageUrl, this);
<code>
QUrl imageUrl("http://qt.nokia.com/logo.png");
m_pImgCtrl = new FileDownloader(imageUrl, this);


connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));<br /></code>
connect(m_pImgCtrl, SIGNAL (downloaded()), SLOT (loadImage()));
</code>


* Заредете QPixmap от свалените данни
* Заредете QPixmap от свалените данни


<code><br />void MainWindow::loadImage()<br />{<br /> QPixmap buttonImage;<br /> buttonImage.loadFromData(m_pImgCtrl-&gt;downloadedData());<br />}
<code>
void MainWindow::loadImage()
{
QPixmap buttonImage;
buttonImage.loadFromData(m_pImgCtrl->downloadedData());
}

Latest revision as of 17:11, 12 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

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

Приложеният отрязък от код показва как се свалят данни като QByteArray от URL (адрес на даден ресурс в Интернет или друга мрежа). Свалените данни могат да бъдат записани като файл или да бъдат преобразувани в подходящ обект. Така например, ако е свалена картинка, то тя може да бъде заредена от QPixmap или QImage чрез метода loadFromData()

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

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

.pro файл

QT ''= network

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

symbian:TARGET.CAPABILITY''= NetworkServices

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*)),
 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;
}

Употреба

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

  • Декларирайте слот
private slots:

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

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

void MainWindow::loadImage() {

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

}