Я пишу приложение, используя Qt4.
Мне нужно загрузить очень короткий текстовый файл с указанного http-адреса.
Файл короткий и необходим для продолжения работы моего приложения, поэтому я хочу убедиться, что загрузка блокируется (или истечет время ожидания через несколько секунд, если файл не найден / недоступен). 1005 *
Я хотел использовать 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 никогда не вызывается.
Есть идеи?
Есть ли лучший способ сделать то, что я пытаюсь сделать?