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()
モデルを my に設定しました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
エントリは順序付けられた整数のシーケンスである必要があるため、使用しました。そのため、リストの途中にあるアイテムが削除されたら、データ リストを完全に再構築する必要があります。これが正しい方法かどうかはわかりません。より良い解決策はありますか?