By default a QTreeWidget
manages the selection of rows (when you click a row it highlights it, when you click another row it highlights that and deselects the previous row), I don't want this and cant figure out how to turn it off.
Asked
Active
Viewed 6,772 times
4
2 Answers
7
you can use setSelectionMode
of the QAbstractItemView
class (which QTreeWidget
is inherited from) to set no selection mode to the component. Something like this (sorry, code in C++):
yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);
In this case items would not get selected but you still will see focus rectangle around them. To fix this you can set your widget to not accept focus by calling:
yourtreeView->setFocusPolicy(Qt::NoFocus);
if your tree widget has to accept focus but should not be drawing focus rectangles you can use custom item delegate and remove State_HasFocus
state from the item's state before drawing it. Something like this:
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);

BartoszKP
- 34,786
- 15
- 102
- 130

serge_gubenko
- 20,186
- 2
- 61
- 64
-
1Thanks a lot, i got lost with setSelectionModel(), didnt think i'd find the answer in QAbstractItemView thats fo sure, thanks Serge. – spearfire Jan 10 '10 at 02:31
-
Thank you and the questioner, pyqt version is: yourtreeView.setSelectionMode(QAbstractItemView.NoSelection) yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus) – 无名小路 May 08 '19 at 08:09
2
Thanks for the answer above, I think the Python version is (^ ^):
yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)

无名小路
- 4,147
- 2
- 13
- 14