QFiledialog gibt das falsche Verzeichnis zurück
Frage
Ein Ausschnitt dessen, was ich verwende, sieht so aus
QDir lastDir;
QFileDialog dial(this);
dial.getOpenFileName(this,
tr("Open File"),
QString("/home"),
tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));
lastDir = dial.directory();
qDebug() << lastDir;
Die Ausgabe ist völlig falsch, egal in welchem Verzeichnis ich lande.Das falsche Verzeichnis ist jedoch immer dasselbe.
AFAICT, ich mache hier nichts falsch.Was geht hier vor sich?Prost
Lösung
getOpenFileName()
ist eine statische Funktion, die sofort einen „Dateiauswahl“-Dialog öffnet und, sobald der Benutzer mit dem Dialog fertig ist, „eine vom Benutzer ausgewählte vorhandene Datei“ zurückgibt.Sie verwenden es so (beachten Sie die Verwendung von ::
und der Klassenname QFileDialog
anstelle des Objektnamens):
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"),
QString("/home"),
tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));
directory()
ist nicht statisch und gibt „das Verzeichnis zurück, das aktuell im Dialog angezeigt wird“.Diese Funktion soll aufgerufen werden, während der Dialog noch geöffnet ist. Sie ist für Anwendungsfälle gedacht, die nicht durch die statischen Aufrufe abgedeckt werden.
Was hier passiert, ist, dass Sie ein Objekt instanziiert, eine statische Funktion darauf aufgerufen haben (die seinen Zustand nicht beeinflusst) und dann aufgerufen haben directory()
Dies spiegelt lediglich den ursprünglichen Zustand des Objekts wider, bei dem es sich wahrscheinlich um das Arbeitsverzeichnis handelt.Stattdessen müssen Sie den Rückgabewert des speichern getOpenFileName()
Rufen Sie eine Variable auf, wie oben gezeigt.
Wenn Sie den Benutzer bitten möchten, einfach ein Verzeichnis auszuwählen, können Sie Folgendes in Betracht ziehen: getExistingDirectory()
stattdessen.Alternativ können Sie, wenn Sie das Verzeichnis aus dem Dateinamen extrahieren möchten, den QDir
Die Klasse verfügt über einige hierfür nützliche Funktionen.