PYQT4列表项目内容在插入列表时正在消失
问题描述:
我有一个pyqt4设置,其中包含一个自定义小部件作为listwidget的项目。我在该自定义小部件中有两个按钮,通过将其向上或向下移动,并将其向上或向下插入。PYQT4列表项目内容在插入列表时正在消失
插入时,项目仍然突出显示,但内容已消失。
以下是移动物品的内容。
def ChangeInit(self, row, direction):
item = self.initiativeList.takeItem(row)
self.initiativeList.insertItem(row + direction, item)
行=的行的项目是在
方向= 1或-1取决于哪个按钮被按压
为什么项目出现要被移动的任何想法,但它的内容不被移动与它或至少不可见?
让我知道你是否需要更多信息。
答
的documentation of QListWidget.addItem
状态:
警告:一个QListWidgetItem只能添加到QListWidget一次。多次将相同的QListWidgetItem添加到QListWidget中将导致未定义的行为。
虽然这可以在一个以上的方式来解释(即同时添加一个小部件多次,或将其添加顺序像你这样做)我sugest您创建一个全新的QListWidgetItem
对象并插入,在清单,只是为了确保。否则我不知道Qt是否会正确处理底层索引。
P.S.下次我会添加一般PyQt
标签,除非它是PyQt4特有的问题。这可能会让你更多的意见(你现在只有23小时后有两个)。
这些应该是他们自己的对象。我有一个不同的函数,它使用我的InitCreatureObject类来创建一个对象,然后将它插入到列表中。我可以尝试删除它并插入一个新的,然后看看是否有效。看起来像很多额外的处理,只是在列表中向上或向下移动它。 – Aaranos
是的,它似乎是比必要的更多的工作。另一种选择是使用单独的模型和视图。也就是说,使用'QListView'并通过从'QAbstractListModel'继承来实现你自己的模型。这需要一些努力,但如果你不仅仅需要一个简单的列表小部件,它可能是值得的。 – titusjan
我调整了我的代码来创建一个新的项目,只是根据旧项目填写它需要的东西,这不是一个漂亮的解决方案,但它的工作原理。如果它仍然给我带来麻烦,我会研究你的其他建议。谢谢。 – Aaranos