QML UI を持つ PySide で書いているアプリがあります。Python で QAbstractListModel をサブクラス化しました。
class MyModel(QtCore.QAbstractListModel):
def __init__(self, parent=None):
QtCore.QAbstractListModel.__init__(self, parent)
self._things = ["foo", "bar", "baz"]
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self._things)
def data(self, index, role=QtCore.Qt.DisplayRole):
if role == QtCore.Qt.DisplayRole:
return self._things[index.row()]
return None
メイン スクリプトでこれを実行して、QML にモデルを提供します。
model = MyModel()
view.rootContext().setContextProperty("mymodel", model)
Qt のドキュメントによると、モデルのロール名は QML からデータにアクセスするために使用され、QML の通常の DisplayRole を「表示」として参照できるため、私の QML には次のような単純なデリゲートを持つ ListView があります。
ListView {
anchors.fill: parent
model: mymodel
delegate: Component { Text { text: display } }
}
ただし、これを行うと、結果はfile:///foo/bar/main.qml:28: ReferenceError: Can't find variable: display
.
モデルにカスタム ロール名を設定しても役に立ちません。アイデア?