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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top