Qt4 更改QTreeView中显示展开器箭头的列

Qt4 更改QTreeView中显示展开器箭头的列,qt4,pyqt,qtreeview,qabstractitemmodel,Qt4,Pyqt,Qtreeview,Qabstractitemmodel,我使用qabstractemmodel存储一些数据,使用QTreeView显示信息。我一直试图将扩展器箭头移动到第二列,而不是第一列,但我并不幸运。我尝试使用QTableView查看是否可以为每个列定义行为,但没有成功。有什么想法吗 以前我使用pygtk来显示TreeView,有一种简单的方法来定义要在哪些列中使用名为TreeView的扩展箭头。set_expander_arrow()Qt没有一个本机“视图”,允许您指定扩展符号所在的列。然而,我相信通过对QTreeView进行一点子类化,您可能

我使用
qabstractemmodel
存储一些数据,使用
QTreeView
显示信息。我一直试图将扩展器箭头移动到第二列,而不是第一列,但我并不幸运。我尝试使用
QTableView
查看是否可以为每个列定义行为,但没有成功。有什么想法吗


以前我使用
pygtk
来显示
TreeView
,有一种简单的方法来定义要在哪些列中使用名为
TreeView的扩展箭头。set_expander_arrow()

Qt没有一个本机“视图”,允许您指定扩展符号所在的列。然而,我相信通过对QTreeView进行一点子类化,您可能会实现您想要的

此答案详细说明了如何在任何项目的左侧绘制某些内容),以便您可以绘制所需的符号,然后覆盖以查找单击的区域是否位于所绘制符号的上方(将有所帮助)


很抱歉,我帮不上什么忙,但实现您想要的行为是一项相当艰巨的任务!(我目前正在将一个GTK项目移植到Qt上,所以我可能需要在某个时候实现它。如果我实现了,我会在这里检查并发布我的代码!)

这很容易做到,但如何做到这一点并不明显,因为
QTreeView
总是在模型列0旁边显示扩展器图标,并且没有办法改变这一点。但是,您可以更改模型列在视图中的显示顺序,因此模型列0及其扩展图标不必位于最左侧

将要显示在扩展器图标左侧的数据放入模型列1,将要显示在扩展器图标右侧的数据放入模型列0。这正是你通常期望的另一种方式。然后,在填充树之后,只需调用
tree->header()->moveSection(1,0)
将列1移动到列0的左侧


感谢Michael Durland将此解决方案发布在Qt邮件列表上。

我猜您的意思一定是
set\u expander\u column()
。然而,对于那些不熟悉pygtk的人来说,你能更清楚地解释一下这是做什么的(和/或提供一个屏幕截图)?pygtk函数指定树视图的哪一列放置扩展图标(也称为+符号以显示/隐藏子项)。