我正在尝试让一个自定义的ListModel工作,并在PyQt中显示。但是,列表视图最终总是为空。我检查了UserModel.users确实包含了它应该包含的项,并且dataChanged正确地触发了,但是什么都没有显示。同时,print(index) in data永远不会输出任何东西,所以模型数据永远不会被调用?我遗漏了什么?
self.userList = QtWidgets.QListView()
self.userList.setModel(self.main.commandHandler.userList)
self.userList.show()
class UserModel(QAbstractListModel):
def __init__(self, parent=None):
QAbstractListModel.__init__(self, parent)
self.users = []
def rowCount(self, parent = None) :
if parent != None:
return 0
return len(self.users)
def flags(self):
return Qt.NoItemFlags
def data(self, index, role = Qt.DisplayRole ):
print(index)
name = self.users[index].name
if index.isValid():
if (role == Qt.DisplayRole):
return QVariant(name)
else:
return QVariant()
def addUser(self, payload):
user = User(payload)
l = len(self.users)
self.users.append(user)
self.dataChanged.emit(self.index(l, 0), self.index(l, 0))发布于 2017-05-05 13:55:19
您需要调用beginInsertRows,而endInsertRows - dataChanged仅适用于现有项。
您可能希望在模型上运行pytest-qt's modeltester以查找更多问题。
此外,请注意,如果您的实际模型像示例一样简单,那么QStandardItemModel和QStringListModel可能更容易使用。
https://stackoverflow.com/questions/43792138
复制相似问题