Usando um qNetworkAccessManager.get, como posso decidir abortar?
-
19-09-2019 - |
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.
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 ().