這是純粹的測試目的和我的好奇心。我使用我的DataDownloader類從服務器獲取數據列表。它適用於不同的網址,如http://tiny-file-url,http://big-file-url。但是如果我通過兩個相同的URL,http://tiny-file-url,http://tiny-file-url,而來自http://tiny-file-url的數據非常小,那麼QNetworkAccessManager的第二個回覆是空的。然而兩個http://big-file-url似乎工作。我想知道QNetworkAccessManager在從同一網址請求小數據時是否有一些神奇功能?我似乎無法獲得有關Qt文檔網站的任何相關信息。Qt QNetworkReply readAll在再次請求相同的URL時返回空白
這裏是我DataDownloader
類:
class DataDownloader : public QObject
{
Q_OBJECT
public:
explicit DataDownloader(QObject* parent = 0);
virtual ~DataDownloader();
QByteArray data() const;
void cancel();
void download(QUrl url);
signals:
void isComplete();
private slots:
void complete(QNetworkReply* reply);
private:
QNetworkAccessManager m_NetworkManager;
QByteArray m_Data;
QNetworkReply* m_pReply;
};
DataDownloader::DataDownloader(QUrl url, QObject* parent) :QObject(parent)
{
connect(&m_NetworkManager, SIGNAL(finished(QNetworkReply*)),
SLOT(complete(QNetworkReply*)));
}
DataDownloader::~DataDownloader()
{
}
void DataDownloader::complete(QNetworkReply* reply)
{
// in the first download it returns data
// but the second time m_Data is empty
m_Data = reply->readAll();
reply->deleteLater();
if (!m_Data.isEmpty()) {
// no signal on the second try
emit isComplete();
}
}
QByteArray DataDownloader::data() const
{
return m_Data;
}
void DataDownloader::cancel()
{
m_pReply->abort();
}
void DataDownloader::download(QUrl url)
{
QNetworkRequest request(url);
m_pReply = m_NetworkManager.get(request);
}
調用這個DataDownloader
如下面的代碼:
void PluginManager::downloadPlugins()
{
m_DownloadIndex++;
savePlugin();
if (m_DownloadIndex < m_PluginList.size()) {
QUrl url;
// alway return the same url here
QString pluginUrl = getPluginUrl(m_PluginList.at(m_DownloadIndex));
url.setUrl(pluginUrl);
if (m_pPluginDownloader == NULL) {
m_pPluginDownloader = new DataDownloader();
// call this function again when isComplete is signaled
connect(m_pPluginDownloader, SIGNAL(isComplete()), this, SLOT(downloadPlugins()));
}
m_pPluginDownloader->download(url);
}
}
當天隨機代碼建議:創建一個'QNetworkAccessManager'而不是每個下載器一個更好。 – peppe 2015-02-06 19:03:00
順便說一句,你是100%有信心http:// tiny-file-url總是按預期工作? – alediaferia 2015-02-09 12:00:58
我對此非常有信心,因爲我可以將數據作爲文件(包含調試文本)下載並使用編輯器打開。 – Jerry 2015-02-09 12:04:36