Я прочитал несколько примеров того, как определить пользовательскую модель для виджета 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
может прослушивать, но я пока не нашел, как это сделать.
Мои вопросы:
- Как я могу уведомить
QComboBox
об изменении данных модели и прослушать это событие, чтобы соответствующим образом изменить currentIndex? - Я использовал
[begin|end]ResetModel
, потому что моя запись должна быть упорядоченной последовательностью целых чисел. Поэтому мне нужно полностью перестроить список данных после удаления элемента в середине списка. Я не знаю, правильный ли это путь. Любое лучшее решение?