QNetworkAccessManager从Internet崩溃中下载图像预览

时间:2015-11-13 21:46:39

标签: qt qt5 qnetworkaccessmanager

我有QListWidget,其中的每个自定义窗口小部件都包含一个标签,该标签使用每个自定义窗口小部件中定义的QNetworkAccessManager从Internet获取它的QPixmap。

当有10个,20个,30个小部件添加到QListWidget时,一切正常。

当小部件的数量(每个小部件都有QNetworkAccessManager从Internet加载图像)达到300/400时,应用程序就会崩溃。线程错误到了。

当应用程序中有很多(300-2000)QNetworkAccessManagers同时从Internet加载图像时,如何避免线程错误?

我使用的是Qt 5.5

1 个答案:

答案 0 :(得分:2)

通常每个应用程序只需要一个QNetworkAccessManagers。它是一个非常重的对象,能够同时管理许多并行连接。它还管理套接字和会话,因此对同一服务器的所有HTTP请求都可以由单个(或少数;它是可配置的)TCP连接维护(一旦请求完成,TCP连接未关闭,下一个请求在相同的连接)。

创建许多QNetworkAccessManagers实例的通常原因是从单独的连接中处理异步信号的麻烦。 请注意,可以将信号从QNetworkReply连接到适当的插槽。

函数QNetworkAccessManager::get()QNetworkAccessManager::post()返回指向该QNetworkReply对象的指针,该对象负责该请求。该QNetworkReply对象的信号可以连接到适当小部件的插槽。因此,一旦该回复完成,它将仅触发一个特定的窗口小部件插槽,例如参见Singleton QNetworkAccessManager not directing the response to desired form