4 Stimmen

Die Schaltflächen zum Ausklappen von QTreeView-Elementen und die Verbindungslinien zwischen Geschwistern und Kindern malen

Ich verwende ein QTreeView und ein QItemDelegate, um den Großteil des Malroutinen neu zu implementieren. Die Erweiterungs-/Zusammenklapp-Schaltflächen und die Linien für Geschwister/Kinder werden jedoch automatisch von einer anderen Malroutine gezeichnet.

Was zeichnet sie und wie kann ich es kontrollieren?

EDIT:

Derzeit zeichnet Qt ein QTreeView-Element in dieser Reihenfolge:

[Erweiterungsschaltfläche] -- [Kontrollkästchen] -- [Rest vom Baumelement Inhalt]

Ich möchte es in dieser Reihenfolge zeichnen:

[Kontrollkästchen] -- [Erweiterungsschaltfläche] -- [Rest vom Baumelement Inhalt]

Das Problem ist, dass meine Malerei im QItemDelegate alle rechts von der Erweiterungsschaltfläche ist.

1voto

Stephen Terry Punkte 6049

Sie können diese mit einem Stylesheet ändern. Dies stammt aus dem Beispiel Anpassen von QTreeView im Stylesheet-Verweis:

 QTreeView::branch:has-siblings:!adjoins-item {
     border-image: url(vline.png) 0;
 }

 QTreeView::branch:has-siblings:adjoins-item {
     border-image: url(branch-more.png) 0;
 }

 QTreeView::branch:!has-children:!has-siblings:adjoins-item {
     border-image: url(branch-end.png) 0;
 }

 QTreeView::branch:has-children:!has-siblings:closed,
 QTreeView::branch:closed:has-children:has-siblings {
         border-image: none;
         image: url(branch-closed.png);
 }

 QTreeView::branch:open:has-children:!has-siblings,
 QTreeView::branch:open:has-children:has-siblings  {
         border-image: none;
         image: url(branch-open.png);
 }

wobei die PNG-Dateinamen die Bilder sind, die Sie verwenden möchten.

1voto

maranos Punkte 86

Die Zeilen werden von QTreeView.drawRow gemalt, die Zweige und Expand-Symbole werden in drawBranches gezeichnet. Implementieren Sie es neu, um nichts zu tun, und Sie werden alle automatisch gemalten Sachen los:

def drawBranches(self, painter, rect, index):
    pass

Leider funktioniert es nicht einfach, die Schaltflächen und Kontrollkästchen während des Malens auszutauschen, da Klicks auf das Kontrollkästchen dann die Schaltfläche auslösen und vice versa.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X