【问题标题】:Change the column where the expander arrow is displayed in QTreeView更改 QTreeView 中显示扩展箭头的列
【发布时间】:2023-03-17 15:18:01
【问题描述】:

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

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

【问题讨论】:

  • 我猜你的意思一定是set_expander_column()。但是,为了那些不熟悉 pygtk 的人的利益,您能否更清楚地解释它的作用(和/或提供屏幕截图)?
  • PyGTK 函数指定将展开图标放置在树视图的哪一列(也就是显示/隐藏子项的 + 符号)。

标签: qt4 pyqt qtreeview qabstractitemmodel


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多