Как предоставить данные из подкласса PySide QAbstractItemModel в QML ListView? - PullRequest
3 голосов
/ 25 октября 2010

У меня есть приложение, которое я пишу на PySide, с пользовательским интерфейсом QML. Я подкласс QAbstractListModel в Python:

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, и что к обычному DisplayRole в QML можно обращаться как "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 голосов
/ 06 декабря 2010

Вам необходимо установить имена ролей для модели, чтобы иметь возможность доступа к данным в QML;

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

...