我有一个带有qlistwidget和一个组合框的gui,应用作过滤器,例如。每个listwidgetitem都有一个变量nodeclass
,并且组合框允许用户仅显示指定节点类的项目,但也可以显示全部。这是由于更改组合框而触发的当前代码:self.comboBox_filter.currentIndexChanged.connect(self.listItemFilter)
def listItemFilter(self):
itemlist = self.getAllListItems()
filter = str(self.comboBox_filter.currentText())
print "Filtering :", itemlist, " for ", filter
self.listWidget_links.clear()
for item in itemlist:
if filter == "all":
self.listWidget_links.addItems(itemlist)
elif filter == "Read":
if item.nodeclass == filter:
self.listWidget_links.addItem(item)
elif filter == "Dot":
if item.nodeclass == filter:
self.listWidget_links.addItem(item)
elif filter == "Camera":
if item.nodeclass == filter:
self.listWidget_links.addItem(item)
这当然是行不通的,因为我清除了列表,然后尝试访问项目属性,也称为RuntimeError: Internal C++ object (PySide2.QtWidgets.QListWidgetItem) already deleted.
因此,如何正确过滤列表,最重要的是,当将其设置为“读取”之类的过滤器,然后又返回“全部”时,我不想丢失任何对象。我希望不要弄乱原始的“所有”列表数据,而只是临时显示过滤器结果(如果用户在组合框中设置了过滤器) 谢谢您的帮助!