PySide Qt Gui .QListWidget: как связать с данными объекта - PullRequest
0 голосов
/ 03 апреля 2020

Я строю GUI во FreeCAD, используя встроенный модуль PySide. Есть ли простой / стандартный способ «прикрепить» данные к элементу списка в PySide Qt Gui .QListWidget? До сих пор у меня есть это (обратите внимание, что это не полный код, но, надеюсь, все понятно):

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())

Это печатает выбранные элементы по имени. Но теперь мне нужно что-то делать с объектами, связанными с этими именами. Есть ли простой способ сделать это? Все, что я могу придумать, - это сложная схема, позволяющая определить индекс каждого выбранного элемента и связать его со списком соответствующих объектов. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете использовать пользовательскую роль для хранения объекта:

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)
...