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
QTreeView auf rootPath des QFileSystemModels expandieren?
-
antimatter
- Beiträge: 5
- Registriert: 20. November 2010 18:07
Re: QTreeView auf rootPath des QFileSystemModels expandieren
Hast du schanmal probiert dir den Index von deinem RootPath zu holen
und diesen im TreeView zu expandieren?
Eventuell werden ja auch die Parents mit expandiert, muß man mal probieren.
Du könntest im TreeView auch mal
testen, vielleicht hilft dir auch das schon.
Code: Alles auswählen
pMyModel->index(path)Code: Alles auswählen
pMyTreeView->expand(Index)Du könntest im TreeView auch mal
Code: Alles auswählen
pMyTreeView->scrollTo(pMyDirModel->index("C:/Users/Ich/Downloads"));
-
antimatter
- Beiträge: 5
- Registriert: 20. November 2010 18:07
Re: QTreeView auf rootPath des QFileSystemModels expandieren
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.
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)