0

几周以来,我一直在与自定义小部件和列表作斗争。

我能够将自定义小部件添加到 QListWidget。我的问题是 insertItem 似乎有问题,因为无论我告诉它去哪一行,它总是将它放到列表的底部。

def AddToInitiative(self):
        creature = self.comboBoxSelectCharacter.currentText()
        if(creature):
            widget = self.NewItemWidget()

            customWidgetItem = QtGui.QListWidgetItem(self.initiativeList)
            customWidgetItem.setSizeHint(QtCore.QSize(400,50))
            self.initiativeList.addItem(customWidgetItem)
            self.initiativeList.setItemWidget(customWidgetItem, widget)

            widget.lineName.setText(creature)
        return

def NewItemWidget(self):
            customWidget = creature_initiative_object.InitCreatureObject()
            customWidget.btnRemove.clicked.connect(self.ItemButtonClicked)
            customWidget.btnInfo.clicked.connect(self.ItemButtonClicked)
            customWidget.btnIncreaseInitOrder.clicked.connect(self.ItemButtonClicked)
            customWidget.btnDecreaseInitOrder.clicked.connect(self.ItemButtonClicked)
            return customWidget

 def ChangeInit(self, row, direction, oldwidget):
        item = self.initiativeList.takeItem(row)

        widget = self.NewItemWidget()
        widget.lineName.setText(oldwidget.lineName.text())
        customWidgetItem = QtGui.QListWidgetItem(self.initiativeList)
        customWidgetItem.setSizeHint(QtCore.QSize(400,50))

        self.initiativeList.insertItem((row + direction), customWidgetItem)
        self.initiativeList.setItemWidget(customWidgetItem, widget)
        self.initiativeList.setCurrentRow(row+direction)

如果我尝试在列表中向上或向下移动项目,尽管分配了行号,它总是直接到底部。我已经输出了行号和计数来验证它应该是正确的行。

您是否知道使用 QListWidget 为需要保留数据的自定义小部件执行此操作的方法?有没有更好的模块可以使用?

我查看了 QListView、QBoxLayout 和其他一些,但无法让它像 QListWidget 一样工作。

4

0 回答 0