QTreeWidget deaktivieren Auswahl
-
19-09-2019 - |
Frage
Standardmäßig verwaltet ein QTreeWidget
die Auswahl von Zeilen (, wenn Sie eine Zeile klicken Sie hebt es, wenn Sie eine andere Zeile klicken Sie hebt hervor, dass und Abwahl der vorherigen Zeile ), ich will das nicht und kann nicht herausfinden, wie es zu deaktivieren.
Lösung
Sie verwenden können setSelectionMode
der QAbstractItemView
Klasse ( die QTreeWidget
wird geerbt von) keinen Auswahlmodus an die Komponente einzustellen. So etwas wie diese (sorry, Code in C ++):
yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);
In diesem Fall Einzelteile würden nicht ausgewählt, aber Sie werden immer noch Fokus Rechteck um sie zu sehen. Um dies zu beheben können Sie Ihren Widget auf nicht akzeptieren Fokus durch den Aufruf:
yourtreeView->setFocusPolicy(Qt::NoFocus);
, wenn Ihr Baum-Widget Fokus zu akzeptieren hat, sollte aber nicht den Fokus werden Zeichenrechtecke Sie benutzerdefinierten Element delegieren und Entfernen State_HasFocus
Zustand von dem Zustand des Elements vor dem Ziehen sie verwenden können. So etwas wie folgt aus:
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);
Andere Tipps
Danke für die Antwort oben, ich denke, die Python-Version ist (^ ^):
yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)