2012-01-14 133 views
2

一个简单的问题,(希望有一个简单的答案)。在QTreeView中使用自定义角色而不是DisplayRole

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

你问就在我为什么想做这样可怕的事情..

基本上,我化QAbstractItemModel旨在使用既为一个TreeView(1根)和实现代码如下(多列,基于母公司) 。
对两种类型的视图使用相同的DisplayRole实际上并不奏效,因为那样我就不得不为两者返回相同的数据。这导致我只想看到树视图中的第一列,当我想返回几列的连接时。

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

在此先感谢。

回答

0

我不知道,如何在python中做到这一点,但是您必须创建您的own delegate才能呈现项目数据。代表实际上是对象,从指数请求任何数据并对其进行渲染

注意,在通常情况下QTreeView能够显示多列,您应该只有columnCount在设置正确的顶级指标

+0

谢谢,我给一个尝试。我知道TreeView可以显示多列,但它似乎只设置了一个全局列计数,所以我必须将其设置为最宽表的大小并制作一些填充样板,以将空列添加到节点类型较少的节点类型列。另外,11列对于树视图来说感觉有些尴尬。 :P – 2012-01-15 01:55:03

0

我已经使用QTreeView来查看一个有许多列的简单表格 - 它运行良好 - 您可以通过发送columnCountChanged信号来调整列计数。所以我不确定你需要做你在问什么。

但我也使用过ItemDelegates:使用my_treeview.setItemDelegate()将树视图指向您的项代理。如果这个子类是QStyledItemDelegate,那么它不需要做太多的工作 - 它大多数情况下只是把它传递给super。

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

(编辑:对不起,我把这个作为一个新的答案,但它实际上只是在什么Lol4t0说的阐述 - 除了columnCountChanged事)