我有QListWidget,其中的每个自定义小部件都包含一个标签,该标签使用每个自定义小程序中定义的QNetworkAccessManager从Internet获取其QPixmap。
当有10、20、30个小部件添加到QListWidget时,一切都很好。
当小部件的数量(每个小部件都有QNetworkAccessManager来从互联网加载图像)达到300/400时,应用程序就坏了。线程错误到达。
当应用程序中有很多(300-2000)QNetworkAccessManager同时从Internet加载图像时,如何避免线程错误?
我使用的是Qt 5.5
通常每个应用程序只需要一个QNetworkAccessManagers
。它是一个相当重的对象,可以同时管理许多并行连接。它还管理套接字和会话,因此对同一服务器的所有HTTP请求都可以通过单个(或几个;它是可配置的)TCP连接来维护(一旦一个请求完成,TCP连接就不会关闭,下一个请求在同一连接中启动)。
创建许多QNetworkAccessManagers
实例的常见原因是从单独的连接中屏蔽其异步信号的问题。注意,可以将不是来自而是来自QNetworkReply
的信号连接到适当的时隙。
函数QNetworkAccessManager::get()
和QNetworkAccessManager::post()
返回指向负责该请求的QNetworkReply
对象的指针。该QNetworkReply
对象的信号可以连接到适当的小部件的插槽。因此,一旦该回复完成,它将只触发一个特定的窗口小部件插槽,例如,请参阅Singleton QNetworkAccessManager未将响应引导到所需的形式