我正在使用Qt4編寫應用程序。在下載短文件時阻止Qt應用程序
我需要從給定的http地址下載一個非常簡短的文本文件。
該文件很短,我的應用程序需要能夠繼續,所以我想確保下載被阻止(或者如果文件未找到/不可用,幾秒鐘後將超時)。
我想使用QHttp :: get(),但這是一種非阻塞方法。
我以爲我可以使用一個線程:我的應用程序會啓動它,並等待它完成。該線程將處理下載並在文件下載或超時後退出。
但我不能讓它工作:
class JSHttpGetterThread : public QThread
{
Q_OBJECT
public:
JSHttpGetterThread(QObject* pParent = NULL);
~JSHttpGetterThread();
virtual void run()
{
m_pHttp = new QHttp(this);
connect(m_pHttp, SIGNAL(requestFinished(int, bool)), this, SLOT(onRequestFinished(int, bool)));
m_pHttp->setHost("127.0.0.1");
m_pHttp->get("Foo.txt", &m_GetBuffer);
exec();
}
const QString& getDownloadedFileContent() const
{
return m_DownloadedFileContent;
}
private:
QHttp* m_pHttp;
QBuffer m_GetBuffer;
QString m_DownloadedFileContent;
private slots:
void onRequestFinished(int Id, bool Error)
{
m_DownloadedFileContent = "";
m_DownloadedFileContent.append(m_GetBuffer.buffer());
}
};
在該方法中創建線程啓動下載,這裏是我在做什麼:
JSHttpGetterThread* pGetter = new JSHttpGetterThread(this);
pGetter->start();
pGetter->wait();
但不工作和我的應用程序不斷等待。它看起來點亮了插槽'onRequestFinished'永遠不會被調用。
有什麼想法?
有沒有更好的方法來做我想做的事情?
謝謝,這有幫助 – aehlke 2010-06-13 08:08:32