Seite 1 von 1

RootItem in QDirModel ändern

Verfasst: 13. Februar 2008 08:00
von Vaaco
Ich möchte einen QFileDialog so modifizieren, das nur ein bestimmter Ordner (inkl. Dateien und Unterordner) angezeigt wird. Ein Navigieren ausserhalb dieses Ordner soll also nicht möglich sein.
Mein erster Ansatz war, über ein ProxyModel (QDirModel als Source) die unerwünschten Ordner rauszufiltern. Hierbei habe ich aber das Problem, dass das RootItem vom Source-Model immer noch auf "MyComputer" gesetzt bleibt, und somit im FileDialog auch bis dahin navigiert werden kann. Es sind dann zwar nur die gewünschten Ordner sichtbar, aber ich möchte das Navigieren generell nicht zulassen.
( Das ich trotz Filter navigieren kann ist logisch, da es sich bei der verbleibenden Struktur um die Parent-Items des gewünschten Ordners handelt. Diese können nicht rausgefiltert werden, da die Children eines rausgefilterten Items natürlich auch raus sind.)

Mein zweiter Ansatz wäre jetzt, das ich den Ordner als RootItem setze. Damit wäre ein navigieren ausserhalb dieses Ordner ja nicht mehr möglich. Allerdings weiss ich nicht wie ich in einem QDirModel/ProxyModel das RootItem neu setzen kann.
Mit den Funktionen mapToSource/mapFromSource hab ich schon experimentiert, bin aber zu keinem Ergebnis gekommen.

Verfasst: 13. Februar 2008 15:31
von RHBaum
Aufn ersten Blick seh ich da nix, d.h. es ist wohl nicht dafuer vorgesehen.

Abhilfe, nen neues QRootedDirModel bauen, basierend auf QAbstractItemModel.
Hat man dann auch viel mehr freiheiten ...
und so kompliziert isses auch ned. ... eher ne schoene uebeung zum verstaendnis des Modell view konzeptes ...

Ciao ...

Verfasst: 19. Februar 2008 07:59
von Vaaco
Genau das wollte ich eigentlich vermeiden.

Es muss doch eine Möglichkeit geben das Rootdirectory neu zu setzen?

Verfasst: 19. Februar 2008 08:05
von upsala
Die gibt es: QFileDialog::setDirectory und alles andere ist Unsinn...

Verfasst: 20. Februar 2008 07:29
von Vaaco
Die Anforderung an den Dialog ist, das der gesetzte Ordner nicht verlassen werden darf.
Mit setDirectory() kann ich dass aber leider nicht verhindern.