如何从PySide QAbstractItemModel子类向QML ListView提供数据?

时间:2010-10-25 10:20:14

标签: python qt pyside qml

我有一个我在PySide中编写的应用程序,它有一个QML UI。我在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's docs say模型的角色名称用于从QML访问数据,并且可以将QML中的普通DisplayRole称为“display”,因此我的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

在模型中设置自定义角色名称没有帮助。想法?

1 个答案:

答案 0 :(得分:0)

您需要为模型设置角色名称才能访问QML中的数据;

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