2

我正在使用 aQAbstractItemModel来存储一些数据,并使用 aQTreeView来显示信息。我一直试图将扩展箭头移动到第二列,而不是把它放在第一列,但我并不走运。我尝试使用 aQTableView来查看是否可以为每一列定义行为,但没有成功。有任何想法吗?

以前我pygtk用来显示 a TreeView,并且有一种简单的方法可以定义要在其中调用扩展箭头的列TreeView.set_expander_arrow()

4

2 回答 2

3

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

将要在扩展器图标左侧显示的数据放入模型列 1,将要在扩展器图标右侧显示的数据放入模型列 0。这与您通常期望的相反。然后,在填充树之后,只需调用tree->header()->moveSection(1,0)将第 1 列移动到第 0 列的左侧。

感谢 Michael Durland 在 Qt 邮件列表上发布了这个解决方案。

于 2014-09-17T09:56:02.407 回答
0

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

这个答案在这里详细说明了如何在任何项目的左侧绘制一些东西),因此您可以绘制您想要的符号,然后覆盖mouseReleaseEvent以查找单击的区域是否超过您绘制的符号之一(将有所帮助)

抱歉,我无法提供更多帮助,但实现您想要的行为是一项艰巨的任务!(我目前正在自己​​将 GTK 项目移植到 Qt,所以我可能不得不在某个时候实现它。如果我这样做了,我会回来查看并发布我的代码!)

于 2013-12-02T05:24:40.437 回答