我已经阅读了一些关于如何为QComboBox
小部件定义自定义模型的示例。
这是我定义自己的模型的方法:
class LevelListModel(QAbstractListModel):
def __init__(self, parent=None, *args):
""" datain: a list where each item is a row
"""
QAbstractListModel.__init__(self, parent, *args)
self.levelList = []
def rowCount(self, parent=QModelIndex()):
return len(self.levelList)
def data(self, index, role):
if index.isValid() and role == Qt.DisplayRole:
return QVariant(index.row())
else:
return QVariant()
def addLevel(self,level):
self.beginResetModel()
self.levelList.append(level)
self.endResetModel()
我将模型设置为我的QComboBox
:
self.levelListModel = LevelListModel()
self.ui.levelComboBox.setModel(self.levelListModel)
我这样将模型添加到列表中:
我这样将模型添加到列表中:
newLevel = Level (self.levelListModel.rowCount() + 1)
self.levelListModel.addLevel(newLevel)
项目已正确添加,并且我可以在组合框中看到它,但我希望将currentIndex更改为新项目的索引。
我猜QAbstractListModel可能会触发某种事件,使得QComboBox可以监听,但我仍然没有找到如何做到这一点。
我的问题是:
1. 如何通知QComboBox模型数据已更改,并侦听该事件以相应地修改currentIndex? 2. 我使用[begin|end]ResetModel,因为我的条目应该是整数的有序序列。因此,一旦删除了列表中间的项,我需要完全重建数据列表。我不知道这是否是正确的方法。有更好的解决方案吗?