Seite 1 von 2

QFileDialog, reine Ordnerauswahl

Verfasst: 21. Juni 2007 15:05
von C_R
Hallo,

ich habe einen QFileDialog. Dieser verhällt sich im Prinzip ganz normal bei der Auswahl. Der zu öffnende Ordner wird eben angeklickt. Nun suche ich aber nach einer Möglichkeit, den aktuellen Ordner (also jener Ordner, zu dem der User im Dialog navigiert hat - der Zielordner) aus dem Dialog zu bekommen.

zb:
User möchte nach /home/hallo/

Der Dialog öffnet sich in "/"
er klickt auf home und dann auf hallo. Muss nun aber wieder eine Ebene nach oben um hallo zu markieren. Und letzteres möchte ich eben vermeiden.

Verfasst: 21. Juni 2007 15:37
von Fabeltier
Hallo,
Leider verstehe ich Dein Problem nicht ganz?!

Einen Pfad, bspw. "/home/jana" zum starten des QFileDialog setzt Du mit:

Code: Alles auswählen

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "/home/jana",
                                                tr("Images (*.png *.xpm *.jpg)"));
..oder setzt ihn im entsprechenden Constructor (sh. assistant).

Nur Ordner oeffnest Du mit:

Code: Alles auswählen

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::Directory);
...is set to "AnyFile", meaning that the user can select any file, or even specify a file that doesn't exist. This mode is useful for creating a "Save As" file dialog. Use "ExistingFile" if the user must select an existing file, or "Directory" if only a directory may be selected. See the QFileDialog::FileMode enum for the complete list of modes.
Afaik wird in Qt der Pfad generell mit '/' angegeben, unabhaengig vom System, Du kannst also entsprechende Pfadnamen zusammenbauen und mit ".." auch nach oben navigieren.

Wenn Dein Dialog schon in "/" (Rootverzeichnis) oeffnet, wirst Du kaum noch eine Ebene hoeher gelangen koennen :wink:

Verfasst: 21. Juni 2007 15:45
von macman
Was spricht gegen QString QFileDialog::getExistingDirectory(...)?

Verfasst: 21. Juni 2007 16:38
von NoobSaibot
ich denke eher, es soll das verzeichnis zurückgegeben werden in dem der benutzer sich ( im dialog ) gerade befindet. und nicht das verzeichnis das gerade selektiert wurde.

Verfasst: 21. Juni 2007 18:22
von Goos
Ich wuerd sagen, dass sowas wie ein SHBrowseForFolder vom Windows werden soll :D

Goos

Verfasst: 28. Juni 2007 11:04
von C_R
NoobSaibot hat geschrieben:ich denke eher, es soll das verzeichnis zurückgegeben werden in dem der benutzer sich ( im dialog ) gerade befindet. und nicht das verzeichnis das gerade selektiert wurde.
Genau das.

PS: sorry, dass ich ne weile nicht vorbei geschaut habe..

Verfasst: 28. Juni 2007 12:51
von macman
Damit was zurück kommt, muss was ausgewählt worden sein. Es sollte kein Problem sein aus der Rückgabe auf das Parentverzeichnis zu kommen.

Verfasst: 28. Juni 2007 20:30
von NoobSaibot
wenn was ausgewählt ist, dann erwartet der benutzer doch sicher auch das ausgewählte verzeichnis als rückgabe und nicht das verzeichnis darüber.

Verfasst: 29. Juni 2007 07:20
von macman
Mir geht es da wie Fabeltier, ich verstehe das Problem des OP nicht. Wenn ich ein Verzeichnis will, dann benutze ich den entsprechenden Dialog. Wenn ich den Pfad zu einer selektierten Datei will, damit ich ihn beim nächsten Mal gleich anbieten kann, dann komme ich mit QFileInfo da ran. Und wenn der User Abbrechen gewählt hat, dann bleibt alles beim alten.

Verfasst: 29. Juni 2007 09:47
von NoobSaibot
du klickst doppelt auf ein verzeichnis (im dialog wird nun in dieses verzeichnis gesprungen). dieses verzeichnis soll nun auch zurückgegeben werden, wenn nichts ausgewählt ist. falls was ausgewählt wurde, soll selbstverständlich das ausgewählte verzeichnis zurückgegeben werden.

Verfasst: 29. Juni 2007 10:33
von macman
Die Filedialoge, die ich bisher hatte, kann man nur verlassen, wenn man etwas ausgewählt hat. Wenn das anders aussieht, wie z.B. bei WinMerge, dann ist der Filename mit einem Namen vorbelegt, den es wahrscheinlich nicht in dem Verzeichnis gibt. Darauf könnte man dann reagieren.

Will man aber an das aktuelle Verzeichnis kommen, auch wenn der User Abbrechen gewählt hat, dann hilft wohl nur das abfangen des Signals

Code: Alles auswählen

void QFileDialog::directoryEntered ( const QString & directory )   [signal] 
This signal is emitted when the user enters a directory. 
This function was introduced in Qt 4.3. 

Verfasst: 29. Juni 2007 23:32
von AnTeevY
Mal eine Frage zum ähnlichen Thema. Es gibt die Möglichkeit, sowohl einzelne als auch mehrere Dateien gleichzeitig mit dem FileDialog abzufragen, aber für Ordner gibt es nur "getExistingDirectory". Ich bräuchte etwas wie "getExistingDirectories", also äquivalent zu getOpenFileNames (->getOpenFileName). Also, dass man einfach mehrere Ordner auswählen kann und die dann in einer QStringList gespeichert werden, eben wie das bei getOpenFileNames mit Dateien der Fall ist. Hab ich das was übersehen, oder gibts da ne andere Lösung?

Verfasst: 2. Juli 2007 07:21
von macman
Da wirst Du dir selbst was basteln müssen.

Verfasst: 2. Juli 2007 09:06
von upsala
Nimm einen Dialog setz ein QTreeView mit einem QDirModel rein. Damit kannst man dann mehrere Dateien/Ordner auswählen.

Verfasst: 2. Juli 2007 09:45
von C_R
hm wieso isn das so schwer zu verstehen?

Beispiel:
Wenn man unter Windows ein Programm installiert, kann man (idR :)) den Installationspfad auswählen. Dabei reicht es, wenn ich mich innerhalb des Dialoges im gewünschten Zielordner befinde und "ok" drücke. Ich muss also nicht nochmal eine Ebene höher und den Ordner "markieren", wie es (bei mir zumindest bisher) mit Qt ist. Gewünscht ist aber eben diese "Windows-Variante".