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

时间:2012-01-14 04:40:10

标签: python qt model pyqt

一个简单的问题,(希望通过一个简单的答案)。

默认情况下,QTreeView会在获取要显示的行时将Qt.DisplayRole传递给模型的数据函数。 但是说我想传递'MyAwesomeTreeDisplayRole'而不是Qt.DisplayRole,我需要做什么?
我似乎无法找到关于视图决定使用displayrole或如何覆盖它的任何内容。

就在你问我为什么要这么糟糕的事情之前......

基本上,我的QAbstractItemModel可用于树视图(1列)和tableview(多列,基于父视图)。
对两种类型的视图使用相同的DisplayRole并不真正起作用,因为那时我被迫为两者返回相同的数据。这导致我只想看到树视图中的第一列,当我想返回几列的串联时。

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

注意,在通常情况下QTreeView 能够显示多个列,您应该只在中正确设置columnCount等级指数

答案 1 :(得分:0)

我使用QTreeView查看包含许多列的简单表 - 它运行良好 - 您可以通过发送columnCountChanged信号来调整列数。所以我不确定你需要做你想要的。

但我也使用了ItemDelegates:使用my_treeview.setItemDelegate()将树视图指向您的项目委托。如果这个子类QStyledItemDelegate那么它不需要做太多工作 - 它通常可以将它全部传递给super。

用户角色只是在你的自定义ItemDelegate和你的ItemModel之间达成一致,只要它们是> =而不是QtCore.Qt.UserRole就可以是你喜欢的任何东西。

(编辑:对不起,我把它作为一个新的答案,但它只是对Lol4t0说的内容的详细说明 - 除了columnCountChanged之外的东西)