这似乎与此处相同(未答复)问题:QML Combobox reports ReferenceError: modelData is not defined。我能找到的QT数据库中最近的(已关闭的)错误是:https://bugreports.qt.io/browse/QTBUG-31135所以我不确定这是同一个问题。我正在运行PyQt5 v5.5和python 3.4.3。
我正在PyQt5中实现一个QAbstractListModel,并将代码简化为手头的问题:
# ExampleModel.py
class ExampleModel(QAbstractListModel):
def __init__(self, parent=None):
super().__init__(parent)
self.items = []
for t in range(0,10):
self.items.append({'text': t, 'myother': 'EXAMPLE'})
def data(self, index, role):
key = self.roleNames()[role]
return self.items[index.row()][key.decode('utf-8')]
def rowCount(self, parent=None):
return len(self.items)
def roleNames(self):
return {Qt.UserRole + 1: b'text',
Qt.UserRole + 2: b'myother'}
相关的QML:
# example.qml
...
ComboBox { // Displays blank entires + throws ReferenceError
id: comboExample
model: ExampleModel{}
textRole: 'text' # This was the missing line to make this work.
}
ListView { // Works Correctly
id: listExample
model: ExampleModel{}
delegate: Text {
text: myname + " " + myother
}
}
...
当我运行它时,组合框有10个空白条目,控制台错误日志显示:
[path] /ComboBox.qml:562:ReferenceError:未定义modelData
(x 10)
现在,如果我将上面的ExampleModel.py中的roleNames()代码修改为以下内容:
def roleNames(self):
return {Qt.UserRole + 1: b'myname'}
ComboBox正常工作。
我在这里错过了一个关键概念吗?我不想两次实现我的模型(一次用于此ComboBox解决方法。)
通过将Mitch的建议添加到上面的example.qml,此问题已修复。 代码已相应更新。