【问题标题】:How to create a button beside header text in QTreeView?如何在 QTreeView 中的标题文本旁边创建一个按钮?
【发布时间】:2019-01-23 05:14:21
【问题描述】:

我需要在这样的标题文本旁边创建一个按钮以进行排序。

要求是:

  • 按钮和标题文本应该在一个组中以对齐在一起
  • 当我点击向上箭头按钮时,列表将被排序(图中未排序:D),图标变为向下箭头,以相反的顺序排序。

我该怎么做?

【问题讨论】:

标签: qt qtreeview qheaderview


【解决方案1】:

如果您对默认指标的外观和行为感到满意,那么以下代码就足够了:

//Set up QTreeView, add model etc...
tree_view->setSortingEnabled(true);
QHeaderView* header = tree_view->header();
header->setSortIndicatorShown(true);

如果您想自定义排序行为,请查看QSortFilterProxyModel

要设置指示器的样式,您也许可以使用 Qt 的样式表:

QHeaderView::down-arrow {
  image: url(down_arrow.png);
}

QHeaderView::up-arrow {
  image: url(up_arrow.png);
}

【讨论】:

  • 谢谢。但我对默认指标不满意。此外,我认为在这种情况下,我想将标题文本和图标放在一起。所以我想我已经为标题创建了类似委托的东西:D
  • @gnase 我不确定“将标题文本和图标放在一个组中”是什么意思。目前,如果您使用默认行为,指示器和文本将被分组 - 单击标题也会更改排序。你需要什么默认行为/外观没有给你?
  • 目前,当我使用默认指示器时,该指示器的位置是 above 标题文本,但我想要指示器 besides 标题文本。因此我说我想将文本和指标组合在一起。
  • 你应用了样式吗?你在哪个操作系统上?我想那是你的风格的默认位置。总是可以使用 QStyleSheet 或使用 QProxyStyle 覆盖。你试过QHeaderView::up-arrow { subcontrol-origin:padding; subcontrol-position: center right;}之类的吗?
  • 我使用 Windows。我又想了想。我们需要更灵活的东西。所以我现在要做的是创建一个代表。然后使用header()->setItemDelegateForRow( 0, new HeaderDelegate( this ) ) :)
猜你喜欢
  • 2022-01-12
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2019-10-22
  • 1970-01-01
  • 2021-02-16
  • 2011-07-05
相关资源
最近更新 更多