我正在使用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”插槽。
有什么想法吗?
是否有更好的方法来实现我正在尝试的功能?