QFileDialog, reine Ordnerauswahl

Alles rund um die Programmierung mit Qt
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

QFileDialog, reine Ordnerauswahl

Beitrag 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.
Fabeltier
Beiträge: 33
Registriert: 3. Juni 2007 04:46
Wohnort: München

Beitrag 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:
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Was spricht gegen QString QFileDialog::getExistingDirectory(...)?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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.
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Ich wuerd sagen, dass sowas wie ein SHBrowseForFolder vom Windows werden soll :D

Goos
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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..
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag 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.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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. 
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
AnTeevY
Beiträge: 19
Registriert: 1. Juli 2006 20:57

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Da wirst Du dir selbst was basteln müssen.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nimm einen Dialog setz ein QTreeView mit einem QDirModel rein. Damit kannst man dann mehrere Dateien/Ordner auswählen.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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".
Antworten