Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTreeView中列上隐藏的排序指示器_Qt - Fatal编程技术网

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

QTreeView中列上隐藏的排序指示器,qt,Qt,我有QTreeView和IsetSortEnable=true,所有列都显示排序指示符,但现在我希望最后一列不显示排序指示符,只显示最后一列 您对我的问题有什么想法或解决方案吗( 请帮忙 感谢QHeaderView当数据按此列排序时,总是在列上绘制排序指示符(如果设置排序指示符或显示为真) 这就是为什么看起来禁止绘制指示器的唯一方法是禁止通过左键单击对列进行排序 要禁止按特定列排序,您需要: 1.创建从QHeaderView继承的新类(或使用事件筛选器) 2.重新实现mouseReleaseEv

我有QTreeView和I
setSortEnable=true
,所有列都显示排序指示符,但现在我希望最后一列不显示排序指示符,只显示最后一列

您对我的问题有什么想法或解决方案吗(

请帮忙
感谢

QHeaderView
当数据按此列排序时,总是在列上绘制排序指示符(如果
设置排序指示符或显示

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

要禁止按特定列排序,您需要:
1.创建从
QHeaderView
继承的新类(或使用事件筛选器)
2.重新实现
mouseReleaseEvent
MousePresseEvent

3.使用
LogicalIndex
指示用户单击了列
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
执行相同的操作


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

在我的例子中,我有三列,有必要隐藏第二列的排序指示符。 因为我有自定义的排序规则,所以我刚刚用
OnHeaderClicked(int列)
slot获得了
QHeaderView::sectionClicked
事件,并执行了以下操作:

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

QHeaderView::setSortIndicatorShown()
函数可能会有帮助。它隐藏了我树视图上的所有指示器,我只想要一个。:(…请帮助