我有QTreeView和我setSortEnable = true
,所有列显示排序指标,但现在我想要最后一列不显示排序指标,只是最后一列。
对我的问题有任何想法或解决方案.. :(
请帮忙 感谢
答案 0 :(得分:1)
QHeaderView
始终在列上绘制排序指示符(如果setSortIndicatorShown
为true
)。
这就是为什么看起来禁止绘制指标的唯一方法是禁止通过左键单击对列进行排序。
要禁止按特定列排序,请执行以下操作:
1.创建一个继承自QHeaderView
的新类(或使用事件过滤器)
2.重新实现mouseReleaseEvent
和mousePressEvent
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;
}