QFiledialog возвращает неверный каталог - PullRequest
0 голосов
/ 25 января 2011

Фрагмент того, что я использую, выглядит следующим образом

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;

Вывод совершенно неверный, независимо от того, в каком каталоге я остановился. Однако неправильный каталог всегда один и тот же.

AFAICT Я не делаю ничего плохого здесь. Что здесь происходит? Приветствия

1 Ответ

3 голосов
/ 25 января 2011

getOpenFileName() - статическая функция, которая немедленно открывает диалоговое окно «Выбор файла» и возвращает, как только пользователь завершит работу с диалоговым окном, «существующий файл, выбранный пользователем». Вы используете его следующим образом (обратите внимание на использование :: и имя класса QFileDialog вместо имени объекта):

QString fileName = QFileDialog::getOpenFileName(this,
                 tr("Open File"),
                 QString("/home"),
                 tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));

directory() не является статичным и возвращает «каталог, отображаемый в данный момент в диалоговом окне». Эта функция предназначена для вызова, пока диалог все еще открыт, она предназначена для случаев использования, которые не охватываются статическими вызовами.


То, что здесь происходит, заключается в том, что вы создали экземпляр объекта, назвали его статической функцией (которая не повлияет на его состояние), а затем вызвали directory(), который будет просто отражать исходное состояние объекта, которое, вероятно рабочий каталог. Вместо этого вам нужно сохранить возвращаемое значение вызова getOpenFileName() в переменной, как показано выше.

Если вы хотите попросить пользователя просто выбрать каталог, вы можете вместо этого использовать getExistingDirectory(). В качестве альтернативы, если вы хотите извлечь каталог из имени файла, класс QDir имеет несколько функций, полезных для этого.

...