Seite 1 von 1

QTreeView auf rootPath des QFileSystemModels expandieren?

Verfasst: 30. Oktober 2011 03:36
von antimatter
Hallo,

ich verwende (unter Win7) ein QFileSystemModel als Datenmodell für eine QTreeView. Dazwischen befindet sich noch ein QSortFilerProxyModel. Standardmäßig werden zwar alle Laufwerke angezeigt, aber in eingeklappten Zustand ("collapsed").
Da ich dem FileSystemModel beispielsweise "C:/Users/Ich/Downloads" als rootPath zuweise, wäre es weitaus praktiabler, wenn der entsprechende Teilbaum expandiert würde. Wie kann so etwas bewerkstelligt werden?

Ich kann mir vorstellen, dass man über die QTreeView nicht besonders viel ausrichten kann, da es nur eine TreeView ist und diese nicht auf spezielle Dateipfad-Operationen ausgelegt ist. Meine Idee wäre quasi, den absoluten Pfad herzunehmen, ihn in seine einzelne Bestandteile zu zerlegen und mit Hilfe dieser Teile in der TreeView zum entsprechenden Eintrag entlang zu expandieren.
Allerdings schaffe ich es nicht, an die benötigten ModelIndexes heranzukommen. Wie kann ich z.B. alle Top-Level Einträge durchlaufen? Mit der sibling()-Funktion komme ich nicht klar oder sie funktioniert anders, als es die Dokumentation vermittelt. Ich habe z.B. einen gültig ModelIndex mit row()=0 und column()=0 für die ganz oberste Reihe (index.data() liefert auch den korrekten Text des Items). Wenn ich aber index.sibling(1,0) aufrufe, erhalte ich einen ungültigen Index zurück. Wie sind die Parameter der sibling()-Funktion in Bezug auf den aktuellen Index zu verstehen?

Ich bin für jede Hilfe dankbar.


Gruß,
antimatter

Re: QTreeView auf rootPath des QFileSystemModels expandieren

Verfasst: 31. Oktober 2011 09:15
von archer
Hast du schanmal probiert dir den Index von deinem RootPath zu holen

Code: Alles auswählen

pMyModel->index(path)
und diesen im TreeView zu expandieren?

Code: Alles auswählen

pMyTreeView->expand(Index)
Eventuell werden ja auch die Parents mit expandiert, muß man mal probieren.

Du könntest im TreeView auch mal

Code: Alles auswählen

pMyTreeView->scrollTo(pMyDirModel->index("C:/Users/Ich/Downloads"));
testen, vielleicht hilft dir auch das schon.

Re: QTreeView auf rootPath des QFileSystemModels expandieren

Verfasst: 1. November 2011 00:44
von antimatter
Hey,

interessant. Die index(path) hab ich wohl übersehen. Zusammen mit scrollTo() funktioniert das einwandfrei und der betreffende Teilbaum wird expandiert. Vielen Dank für den Tipp.

Hinweis: steckt zwischen dem Model und der TreeView noch ein ProxyModel, dann muss man den modelIndex "konvertieren", um den korrespondierenden proxyIndex zu erhalten. Da die TreeView nur das ProxyModel kennt, kann sie auch nur mit einem dafür passenden Index was anfangen.

Code: Alles auswählen

modelIndex = myModel.index(path)
proxyIndex = myProxy.mapFromSource(modelIndex)
treeView.scrollTo(proxyIndex)