3

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.

モデルにカスタム ロール名を設定しても役に立ちません。アイデア?

4

1 に答える 1

0

モデルが QML のデータにアクセスできるようにするには、ロール名を設定する必要があります。

http://doc.qt.io/archives/qt-4.7/qabstractitemmodel.html#setRoleNames

于 2010-12-06T16:11:15.063 に答える