2017-09-14 52 views
0

我有一个pyqt4设置,其中包含一个自定义小部件作为listwidget的项目。我在该自定义小部件中有两个按钮,通过将其向上或向下移动,并将其向上或向下插入。PYQT4列表项目内容在插入列表时正在消失

插入时,项目仍然突出显示,但内容已消失。

以下是移动物品的内容。

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

行=的行的项目是在
方向= 1或-1取决于哪个按钮被按压

为什么项目出现要被移动的任何想法,但它的内容不被移动与它或至少不可见?

让我知道你是否需要更多信息。

回答

0

documentation of QListWidget.addItem状态:

警告:一个QListWidgetItem只能添加到QListWidget一次。多次将相同的QListWidgetItem添加到QListWidget中将导致未定义的行为。

虽然这可以在一个以上的方式来解释(即同时添加一个小部件多次,或将其添加顺序像你这样做)我sugest您创建一个全新的QListWidgetItem对象并插入,在清单,只是为了确保。否则我不知道Qt是否会正确处理底层索引。

P.S.下次我会添加一般PyQt标签,除非它是PyQt4特有的问题。这可能会让你更多的意见(你现在只有23小时后有两个)。

+0

这些应该是他们自己的对象。我有一个不同的函数,它使用我的InitCreatureObject类来创建一个对象,然后将它插入到列表中。我可以尝试删除它并插入一个新的,然后看看是否有效。看起来像很多额外的处理,只是在列表中向上或向下移动它。 – Aaranos

+0

是的,它似乎是比必要的更多的工作。另一种选择是使用单独的模型和视图。也就是说,使用'QListView'并通过从'QAbstractListModel'继承来实现你自己的模型。这需要一些努力,但如果你不仅仅需要一个简单的列表小部件,它可能是值得的。 – titusjan

+0

我调整了我的代码来创建一个新的项目,只是根据旧项目填写它需要的东西,这不是一个漂亮的解决方案,但它的工作原理。如果它仍然给我带来麻烦,我会研究你的其他建议。谢谢。 – Aaranos