我有一個應用程序,我在PySide中編寫了一個QML UI。我已經在Python子類QAbstractListModel:如何將PySide QAbstractItemModel子類中的數據提供給QML ListView?
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訪問數據,和一個可以指正常的DisplayRole在QML爲「顯示」,因此我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
。
在模型中設置自定義角色名稱無濟於事。想法?
好像我的模式沒有被正確地QML使用,因爲之後我添加了一些記錄到rowCount時(),我發現它沒有被稱爲:/這可能是根本原因則。我仍然不知道爲什麼。 – Ilkka 2010-10-25 10:35:17
我從rowCount()中刪除了父索引有效性檢查,這實際上似乎修復了項目(beginInserRows(...)... endInsertRows())的動態添加。我沒有在這裏顯示,因爲我覺得這是無關緊要的。 – Ilkka 2010-10-26 06:55:25
我一直試圖讓這個工作呢!我一直在關注http://doc.qt.nokia.com/4.7/qdeclarativemodels.html示例,我還沒有找到相同的pyside。你有沒有嘗試設置委託文本{text:modelData}請參閱:http://www.qt.gitorious.org/pyside/pyside-examples/commit/419a83371ba4b4c333559c25bcb7069924b4a227 – jonmiddleton 2010-10-26 07:42:51