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.

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top