c – 使用QNetworkAccessManager.get,我该如何决定中止?

我试图使用QT QNetworkAccessManager类来管理多线程C / QT应用程序中的一些下载.

在工作线程上(编辑:除了执行下载之外,线程是出于其他原因而分开),我想要访问外部服务器并准备好使用代码接收结果:

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

但是在下载完成之前,我可能会决定我对结果不感兴趣.

所以我想设置一种通过发出信号do_abort()来断开与另一个线程的连接的方法.

这表明自己是:

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

但我认为这不会起作用,因为abort不是QNetworkReply的插槽.

那么如何设置一种机制,我可以从另一个线程停止下载?我可以继承QNetworkReply并为该类提供适当的插槽.但我也想了解情况.

最佳答案 您不需要工作线程来使用QNetworkAccessManager.它是异步的,因此可以从主线程中使用它.

在QThread中,你实现了一个abortTheReply()槽,你可以在其中执行m_reply-> abort().然后将do_abort()信号连接到abortTheReply().

点赞