我已閱讀了一些關於如何爲QComboBox
小部件定義自定義模型的示例。PyQt:當QAbstractListModel數據發生變化時,如何更改QComboBox中的currentIndex
以下是我定義我的模型:
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
可以聽到的某種事件,但我還沒有找到如何做到這一點。
我的問題是:
- 我怎麼能通知模型數據變化,並聽取該事件相應地修改CURRENTINDEX的
QComboBox
? - 我用
[begin|end]ResetModel
因爲我的入口應該是一個有序的整數序列。所以我需要在列表中間的一個項目被刪除後完全重建數據列表。我不知道這是否正確。有更好的解決方案