QTreeView auf rootPath des QFileSystemModels expandieren?

Alles rund um die Programmierung mit Qt
Antworten
antimatter
Beiträge: 5
Registriert: 20. November 2010 18:07

QTreeView auf rootPath des QFileSystemModels expandieren?

Beitrag 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
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Re: QTreeView auf rootPath des QFileSystemModels expandieren

Beitrag 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.
antimatter
Beiträge: 5
Registriert: 20. November 2010 18:07

Re: QTreeView auf rootPath des QFileSystemModels expandieren

Beitrag 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)
Antworten