QTreeView中列上的隐藏排序指示器

时间:2014-11-06 09:14:35

标签: qt

我有QTreeView和我setSortEnable = true,所有列显示排序指标,但现在我想要最后一列不显示排序指标,只是最后一列。

对我的问题有任何想法或解决方案.. :(

请帮忙 感谢

2 个答案:

答案 0 :(得分:1)

当数据按此列排序时,

QHeaderView始终在列上绘制排序指示符(如果setSortIndicatorShowntrue)。

这就是为什么看起来禁止绘制指标的唯一方法是禁止通过左键单击对列进行排序。

要禁止按特定列排序,请执行以下操作:
1.创建一个继承自QHeaderView的新类(或使用事件过滤器)
2.重新实现mouseReleaseEventmousePressEvent
3.使用logicalIndexAt表示用户点击了列
4.在调用基本方法之前调用setSectionsClickable(false),然后调用setSectionsClickable(true)

示例:

void HeaderView::mouseReleaseEvent(QMouseEvent* e)
{
  const int index = logicalIndexAt(e->pos());
  if (index == 3) setSectionsClickable(false);
  QHeaderView::mouseReleaseEvent(e);
  setSectionsClickable(true);
}

mousePressEvent执行相同操作。

因此您将禁止对某列进行排序

答案 1 :(得分:0)

在我的情况下,我有三列,有必要隐藏第二列的排序指示器。 由于我有自定义排序规则,因此只需QHeaderView::sectionClicked插槽OnHeaderClicked(int column),并执行此操作:

switch (column)
{
    case 0:
        // Custom sorting operations
        break;
    case 1:
        tree_widget_->sortByColumn(-1);
        break;
    case 2:
        // Custom sorting operations
        break;
}