Estoy escribiendo una aplicación usando Qt4.Bloquear una aplicación Qt durante la descarga de un archivo corto
Necesito descargar un archivo de texto muy corto desde una dirección http dada.
El archivo es corto y se necesita para que mi aplicación pueda continuar, por lo que me gustaría asegurarme de que la descarga sea de bloqueo (o agotaré unos segundos si el archivo no se encuentra/no está disponible).
Quería usar QHttp :: get(), pero este es un método que no bloquea.
Pensé que podría usar un hilo: mi aplicación lo iniciaría y esperaría a que termine. El hilo manejaría la descarga y se cerraría cuando se descargue el archivo o después de un tiempo de espera.
Pero no puedo hacer que funcione:
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());
}
};
En el método de la creación de la rosca para iniciar la descarga, esto es lo que estoy haciendo:
JSHttpGetterThread* pGetter = new JSHttpGetterThread(this);
pGetter->start();
pGetter->wait();
Pero eso no funciona y mi aplicación sigue esperando. Parece iluminado, nunca se llama a la ranura 'onRequestFinished'.
¿Alguna idea?
¿Hay una mejor manera de hacer lo que estoy tratando de hacer?
gracias, esto ayudó – aehlke