getOpenFileName()
- статическая функция, которая немедленно открывает диалоговое окно «Выбор файла» и возвращает, как только пользователь завершит работу с диалоговым окном, «существующий файл, выбранный пользователем». Вы используете его следующим образом (обратите внимание на использование ::
и имя класса QFileDialog
вместо имени объекта):
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"),
QString("/home"),
tr("Raw Images (*.nef *.NEF *.dng *.DNG)"));
directory()
не является статичным и возвращает «каталог, отображаемый в данный момент в диалоговом окне». Эта функция предназначена для вызова, пока диалог все еще открыт, она предназначена для случаев использования, которые не охватываются статическими вызовами.
То, что здесь происходит, заключается в том, что вы создали экземпляр объекта, назвали его статической функцией (которая не повлияет на его состояние), а затем вызвали directory()
, который будет просто отражать исходное состояние объекта, которое, вероятно рабочий каталог. Вместо этого вам нужно сохранить возвращаемое значение вызова getOpenFileName()
в переменной, как показано выше.
Если вы хотите попросить пользователя просто выбрать каталог, вы можете вместо этого использовать getExistingDirectory()
. В качестве альтернативы, если вы хотите извлечь каталог из имени файла, класс QDir
имеет несколько функций, полезных для этого.