2014-11-06 223 views
1

我有它的QTreeView和I setSortEnable = true,並且所有的列顯示排序指示符,但現在我想要最後一列不顯示排序指示符,只是最後一列。QTreeView中的列上隱藏的排序指示器

有任何想法或解決我的問題.. :(

請幫助 感謝

+0

'QHeaderView :: setSortIndicatorShown()'函數可能的幫助。 – vahancho 2014-11-06 09:18:24

+0

它隱藏了我的樹狀圖上的所有指標,我只想要一個。 :(..請幫助 – 2014-11-06 09:20:15

回答

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相同。

因此,你將禁止某些列

+0

感謝您的幫助......這是工作 – 2014-11-06 16:00:01

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; 
}