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