我正在使用 Qt4 编写应用程序。
我需要从给定的 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”从未被调用过。
任何的想法 ?
有没有更好的方法来做我想做的事情?