我在尝试如何在pyqtqlistview中正确地完成异步映像加载。在
我的主小部件由一个Qlistview和一个QLineEdit文本框组成。
我有一个参与者数据库,我使用QAbstractListModel的子类查询该数据库,当文本输入到文本框中时,数据库被查询,并用结果填充模型。结果随后显示在Qlistview中。(每个Actor的结果包含actors的名称和图像的路径。)
是这样的:
当结果集太大(大于50)时,问题就开始了,从磁盘加载图像会使用户界面挂起。我希望实现的行为是首先为所有结果加载一个占位符图像,然后在另一个线程中从磁盘加载特定的映像,加载后用新加载的映像更新Qlistview项。在
为此,我创建了一个自定义的QItemDelegate类,该类包含所有需要加载的图像的缓存。如果图像不在缓存中,那么它将绘制占位符图像并向另一个线程发送信号,该线程加载该图像并将其放入缓存中。在
我的代表课程:class MyDelegate(QStyledItemDelegate):
t1 = pyqtSignal(str, str, dict)
def __init__(self, image_cache, loader_thread, parent=None):
super(MyDelegate, self).__init__(parent)
self.placeholder_image = QPixmap(PLACEHOLDER_IMAGE_PATH).scaled(200, 300)
self.image_cache = image_cache
self.loade