我使用QAbstractItemModel
来存储一些数据,使用QTreeView
来显示信息。我一直试图将扩展箭头移动到第二列而不是在第一列中,但我没有幸运。我尝试使用QTableView
来查看是否可以为每列定义行为,但没有成功。有什么想法吗?
以前我使用pygtk
来显示TreeView
,并且可以通过一种简单的方法来定义要将扩展箭头称为TreeView.set_expander_arrow()
答案 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项目,所以我可能必须在某个时候实现它。如果我曾经这样做,我会在这里查看并发布我的代码!)