PySide QtGui.QListWidget: 如何关联到对象数据

PySide QtGui.QListWidget: how to associate to object data

我正在使用内置的 PySide 模块在 FreeCAD 中构建 GUI。在 PySide QtGui.QListWidget 中是否有 simple/standard 方法将数据 'attach' 到列表项?到目前为止,我有这个(注意这不是完整的代码,但希望能够理解这一点):

Class fcGui(QtGui.QWidget):

    def initUI(self):
        self.listWidget = QtGui.QListWidget(self)
        self.objData = []
        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        for i in range(0,len(App.ActiveDocument.Objects)):
            self.listWidget.addItem(App.ActiveDocument.Objects[i].Name)

    def acceptance(self):
        print(self.listWidget.selectedItems())

这将按名称打印所选项目。但是现在我需要对与这些名称关联的对象做一些事情。有没有直接的方法来做到这一点?我所能想出的只是一个复杂的方案来确定每个选定项目的索引,并将其与相应对象的列表相关联。任何帮助将不胜感激。

您可以使用自定义角色来存储对象:

ObjectRole = QtCore.Qt.UserRole + 1000


Class fcGui(QtGui.QWidget):
    def initUI(self):
        self.listWidget = QtGui.QListWidget(self)
        self.objData = []
        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        for obj in App.ActiveDocument.Objects:
            it = QtGui.QListWidgetItem(obj.Name)
            it.setData(ObjectRole, obj)
            self.listWidget.addItem(it)

    def acceptance(self):
        for it in self.listWidget.selectedItems():
            obj = it.data(ObjectRole)
            print(obj, obj.Name)