1
默認情況下,QTreeWidget
管理行的選擇(當你點擊一行,它突出顯示它,當你點擊另一行時突出顯示並取消選擇前一行),我不想這個和無法弄清楚如何關閉它。QTreeWidget關閉選擇
默認情況下,QTreeWidget
管理行的選擇(當你點擊一行,它突出顯示它,當你點擊另一行時突出顯示並取消選擇前一行),我不想這個和無法弄清楚如何關閉它。QTreeWidget關閉選擇
您可以使用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);
非常感謝,我失去了與setSelectionModel(),沒想到我會找到QAbstractItemView中多數民衆贊成FO肯定,感謝塞爾答案。 – spearfire 2010-01-10 02:31:28