【发布时间】:2008-10-30 16:06:01
【问题描述】:
我正在使用 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”。
有什么想法吗?
有没有更好的方法来做我想做的事情?
【问题讨论】:
标签: qt