2010-01-09 95 views
1

默認情況下,QTreeWidget管理行的選擇(當你點擊一行,它突出顯示它,當你點擊另一行時突出顯示並取消選擇前一行),我不想這個和無法弄清楚如何關閉它。QTreeWidget關閉選擇

回答

3

您可以使用QAbstractItemView類的setSelectionMode(其中QTreeWidget是從中繼承而來的)不爲組件設置選擇模式。像這樣(在C++對不起,代碼)的東西:

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection); 

在這種情況下,項目將不會被選中,但你仍然會看到他們周圍的焦點矩形。爲了解決這個問題,你可以設置你的小工具,無法通過調用接受焦點:

yourtreeView->setFocusPolicy(Qt::NoFocus); 

如果你的樹部件必須接受焦點,但不應該是繪製聚焦框,您可以使用自定義項目的委託,並從項目的刪除State_HasFocus狀態繪製之前的狀態。事情是這樣的:

class NoFocusDelegate : public QStyledItemDelegate 
{ 
protected: 
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; 
}; 

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItem itemOption(option); 
    if (itemOption.state & QStyle::State_HasFocus) 
     itemOption.state = itemOption.state^QStyle::State_HasFocus; 
    QStyledItemDelegate::paint(painter, itemOption, index); 
} 

.... 

NoFocusDelegate* delegate = new NoFocusDelegate(); 
yourtreeView->setItemDelegate(delegate); 
+0

非常感謝,我失去了與setSelectionModel(),沒想到我會找到QAbstractItemView中多數民衆贊成FO肯定,感謝塞爾答案。 – spearfire 2010-01-10 02:31:28