在QTreeView中使用自定义角色代替DisplayRole
这是个简单的问题,希望能有个简单的答案。
QTreeView在获取要显示的行时,默认会使用Qt.DisplayRole来调用模型的数据函数。可是,如果我想用'我的超级树显示角色'(MyAwesomeTreeDisplayRole)来代替Qt.DisplayRole,我该怎么做呢?
我找不到关于视图是如何决定使用displayrole或者如何覆盖它的相关信息。
在你问我为什么想做这种奇怪的事情之前,
其实,我的QAbstractItemModel是为了同时适用于树形视图(1列)和表格视图(多列,基于父级)而设计的。
如果两个视图都使用相同的DisplayRole就不太好,因为这样我就只能返回相同的数据。这导致我在树形视图中只能看到第一列,而我其实想返回几列数据的组合。
我觉得最简单的方法就是使用自定义角色(TreeDisplayRole和TableDisplayRole)。
提前谢谢你。
2 个回答
我用QTreeView来查看一个有很多列的简单表格,效果很好。你可以通过发送columnCountChanged信号来调整列的数量。所以我觉得你可能不需要做你所问的事情。
不过我也用过ItemDelegates:你可以用my_treeview.setItemDelegate()来把树形视图指向你的项目代理。如果这个代理是QStyledItemDelegate的子类,那它其实不需要做太多工作,基本上可以把所有事情都交给父类处理。
用户角色就是在你自定义的ItemDelegate和ItemModel之间达成一致的,可以是你喜欢的任何东西,只要它们的值大于等于QtCore.Qt.UserRole就行。
(编辑:抱歉,我把这个当作新答案发了,但其实只是对Lol4t0说的内容的进一步解释,除了columnCountChanged的部分)
我不知道怎么在 python
中做到这一点,但你需要创建一个自己的代理来显示项目的数据。代理其实就是一个对象,它会从索引中请求数据并把它显示出来。
需要注意的是,通常情况下 QTreeView
可以显示多个列,你只需要确保为顶层索引正确设置 columnCount
。