Pergunta

Estou tentando usar a classe QNetworkAccessManager QT para gerenciar alguns downloads em um aplicativo C ++/QT com vários threades.

Em trabalhador fio (Editar: O tópico está separado por outros motivos, além de fazer o download), eu gostaria de fazer um chegar a um servidor externo e estar pronto para receber os resultados com o código:

...
m_nam = new QNetworkAccessManager(this);
QNetworkReply *reply = m_nam->get(request);
connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
        SIGNAL(finished(QNetworkReply *)));
...

Mas posso decidir, antes que o download seja concluído, que não estou interessado no resultado.

Então, eu gostaria de configurar uma maneira de desconectar a conexão de outro thread, emitindo um sinal do_abort ().

O que se sugere é:

connect(this, SIGNAL(do_abort()), reply, SLOT(abort()));

Mas acho que não funcionará porque o aborto não é um slot da QNETWORKREPLE.

Então, como posso definir um mecanismo em que posso interromper esse download de outro tópico? Eu poderia subclasse qNetworkReply e dar a essa classe o slot apropriado. Mas eu gostaria de entender a situação também.

Foi útil?

Solução

Você não precisa de um tópico de trabalhador para usar o QNetworkAccessManager. É assíncrono, por isso não há problema em usá -lo no seu tópico principal.

No qthread, você implementa um slot aborttheRply () e dentro que você faz m_reply-> abort (). Em seguida, você conecta seu sinal do_abort () ao aborto ().

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