我有QListWidget,其中的每个自定义窗口小部件都包含一个标签,该标签使用每个自定义窗口小部件中定义的QNetworkAccessManager从Internet获取它的QPixmap。
当有10个,20个,30个小部件添加到QListWidget时,一切正常。
当小部件的数量(每个小部件都有QNetworkAccessManager从Internet加载图像)达到300/400时,应用程序就会崩溃。线程错误到了。
当应用程序中有很多(300-2000)QNetworkAccessManagers同时从Internet加载图像时,如何避免线程错误?
我使用的是Qt 5.5
答案 0 :(得分:2)
通常每个应用程序只需要一个QNetworkAccessManagers
。它是一个非常重的对象,能够同时管理许多并行连接。它还管理套接字和会话,因此对同一服务器的所有HTTP请求都可以由单个(或少数;它是可配置的)TCP连接维护(一旦请求完成,TCP连接未关闭,下一个请求在相同的连接)。
创建许多QNetworkAccessManagers
实例的通常原因是从单独的连接中处理异步信号的麻烦。
请注意,可以将信号从QNetworkReply
连接到适当的插槽。
函数QNetworkAccessManager::get()
和QNetworkAccessManager::post()
返回指向该QNetworkReply
对象的指针,该对象负责该请求。该QNetworkReply
对象的信号可以连接到适当小部件的插槽。因此,一旦该回复完成,它将仅触发一个特定的窗口小部件插槽,例如参见Singleton QNetworkAccessManager not directing the response to desired form