Pergunta

Eu estou usando o Qt 4.6.3 e as seguintes não-código de trabalho

QStringList userInfo;
QNetworkRequest netRequest(QUrl("http://api.stackoverflow.com/1.1/users/587532"));
QNetworkReply *netReply = netman->get(netRequest);

// from here onwards not working
netReply->waitForReadyRead(-1);
if (netReply->isFinished()==true)
{userInfo << do sth to reply;}
return userInfo;

como esta função devolve um vazio QStringList, o aplicativo falha.Como esperar até que a solicitação foi concluída e, em seguida, processar a resposta dentro de uma função

Foi útil?

Solução

Você pode usar o loop de eventos:

QEventLoop loop;
connect(netReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
// here you have done.

Além disso, você deve considerar a adição de alguns mais curtos de tempo limite de rede (20?).Eu não tenho certeza se terminou é chamado, mesmo se ocorreu um erro.Assim, é possível, que você tem de ligar para o sinal de erro também.

Outras dicas

Primeiro eu recomendo que você leia a documentação do Qt Documentação de Referência que você pode encontrar aqui: http://doc.qt.nokia.com/latest/classes.html.

Olhando para o seu exemplo de código, parece que você já tem, lado a lado com QNetworkRequest e QNetworkReply, um QNetworkAccessManager.O que você precisa é conectar um slot para o finished(QNetworkReply *) sinal.Este sinal é emitido sempre que um pendente de rede de resposta é terminado.

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://api.stackoverflow.com")));

Agora, em seu slot, você pode ler os dados que foi enviada em resposta à sua solicitação.Algo como:

void MyClass::MySlot(QNetworkReply *data) {
    QFile file("dataFromRequest");
    if (!file.open(QIODevice::WriteOnly))
        return;
    file.write(data->readAll());
    file.close();
}

EDITAR:

Aguardar de forma síncrona para um sinal de usar QEventLoop.Você tem um exemplo aqui

http://wiki.forum.nokia.com/index.php/How_to_wait_synchronously_for_a_Signal_in_Qt

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top