我正在使用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