正在开发一个用户应该能够取消所有上传的应用程序。现在我想知道我是否必须追查 QNAM 的所有回复,或者只是删除它并期望它们全部中止?
文档中没有任何内容说明有关中止的任何内容,但我假设它会。
销毁 QNetworkAccessManager 对象并释放所有资源。请注意,从此类返回的 QNetworkReply 对象将此对象设置为其父对象,这意味着如果您不对它们调用 QObject::setParent() ,它们将随之被删除。
编辑: 最终为每个回复使用了一个包装器(它也获取了它的所有权并进行重试等),它在其析构函数中既断开了 QNetworkReplys 信号又中止了它。它与包装器一起被删除(父级->子级)
它只会删除回复。来源:
QNetworkAccessManager::~QNetworkAccessManager()
{
// ...
qDeleteAll(findChildren<QNetworkReply *>());
// ...
}
并且QNetworkReply的析构函数是空的,所以你需要手动中止它们。
文档说销毁会在内部调用中止。但是,如果您有这样的连接:
// somewhere in the HttpRequestWorker
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, &HttpRequestWorker::handle_reply);
handle_reply
不会通过HttpRequestWorker
的销毁而被调用,因为连接依赖于this
,所有关于this
的连接都会在发出QNetworkAccessManager::finished
信号之前被销毁。HttpRequestWorker
类时手动调用 abort。