在QTreeView中使用自定义角色而不是displayer

2024-09-28 15:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

一个简单的问题(希望有一个简单的答案)。在

QTreeView会过去的Qt.DisplayRole默认情况下,获取要显示的行时模型的数据函数。 但是如果我想通过'MyAwesomeTreeDisplayRole'而不是Qt.DisplayRole,我需要做什么?
我似乎找不到视图决定在何处使用displayrole或如何重写它。在

就在你问我为什么要做这种可怕的事之前。。在

基本上,我的QAbstractItemModel可以同时用于treeview(1列)和tableview(多列,基于父级)。
对两种类型的视图使用相同的DisplayRole并不真正起作用,因为从那以后,我不得不为这两种视图返回相同的数据。这导致当我想返回一对列的连接时,我只看到treeview中的第一列。在

我认为最简单的方法就是使用自定义角色(TreeDisplayRole和TableDisplayRole)。在

提前谢谢。在


Tags: 数据函数答案模型视图情况qttreeview
2条回答

我用QTreeView查看了一个包含许多列的简单表—它工作得很好—您可以通过向它发送columnCountChanged信号来调整列计数。所以我不确定你是否需要按你的要求去做。在

但我也用过item委托:使用我的_treeview.setItemDelegate()将treeview指向项目委托。如果这个子类属于QStyledItemDelegate,那么它不需要做太多的工作-它基本上可以把它全部传递给super。在

用户角色只需在您的自定义ItemDelegate和ItemModel之间达成一致,并且可以是您喜欢的任何角色,只要它们大于或等于QtCore.Qt.UserRole. 在

(编辑:抱歉,我把这个作为一个新的答案,但它实际上只是对Lol4t0所说的话的一个阐述-除了columnCountChanged的事情)

我不知道如何在python中执行,但您必须创建您的own delegate来呈现项目数据。Delegate实际上是一个对象,它从索引中请求任何数据并呈现它

请注意,在常见情况下,QTreeView能够显示多个列,对于顶层索引,您应该只在中正确地设置columnCount

相关问题 更多 >