首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QListView拒绝显示子类QAbstractListModel

QListView拒绝显示子类QAbstractListModel
EN

Stack Overflow用户
提问于 2017-05-05 04:21:17
回答 1查看 102关注 0票数 0

我正在尝试让一个自定义的ListModel工作,并在PyQt中显示。但是,列表视图最终总是为空。我检查了UserModel.users确实包含了它应该包含的项,并且dataChanged正确地触发了,但是什么都没有显示。同时,print(index) in data永远不会输出任何东西,所以模型数据永远不会被调用?我遗漏了什么?

代码语言:javascript
复制
    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))
EN

回答 1

Stack Overflow用户

发布于 2017-05-05 13:55:19

您需要调用beginInsertRows,而endInsertRows - dataChanged仅适用于现有项。

您可能希望在模型上运行pytest-qt's modeltester以查找更多问题。

此外,请注意,如果您的实际模型像示例一样简单,那么QStandardItemModelQStringListModel可能更容易使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43792138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档