更改QTreeView中显示扩展箭头的列

时间:2013-11-28 11:12:47

标签: qt4 pyqt qtreeview qabstractitemmodel

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

以前我使用pygtk来显示TreeView,并且可以通过一种简单的方法来定义要将扩展箭头称为TreeView.set_expander_arrow()

的列

2 个答案:

答案 0 :(得分:1)

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

将要显示的数据放到扩展器图标的 left 到模型列1中,将要显示的数据放到扩展器图标的 right 中模型第0列。这正如您通常所期望的那样。然后,在填充树之后,只需调用tree->header()->moveSection(1,0)将第1列移动到第0列的左侧。

向Michael Durland致信,他将此解决方案发布在Qt邮件列表中。

答案 1 :(得分:0)

Qt没有本地“视图”,允许您指定扩展符号所在的列。但是,我相信通过QTreeView的一些子类,您可以实现您想要的目标。

此答案here详细说明了如何在任何项目的左侧绘制内容,因此您可以绘制所需的符号,然后覆盖mouseReleaseEvent以查找点击的区域是否超过您的某个区域绘制的符号(this将有所帮助)

抱歉,我无法提供更多帮助,但实施您想要的行为是一项艰巨的任务! (我目前正在向Qt移植一个GTK项目,所以我可能必须在某个时候实现它。如果我曾经这样做,我会在这里查看并发布我的代码!)