getOpenFileName - предварительный выбор последнего открытого файла не работает

В моем приложении мне нужно загрузить много изображений. Я бы действительно использовал возможность выбора последнего открытого файла, поэтому я хотел бы знать последний выбранный файл. В документации говорится:

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                            "/home",
                                            tr("Images (*.png *.xpm *.jpg)"));

Рабочий каталог файлового диалога будет установлен в dir. Если dir включает имя файла, файл будет выбран.

Поэтому я должен где-то сохранить путь к последнему открытому файлу, а затем вставить его вместо «/ home». Но это не работает. В диалоговом окне открытия файла имя файла обрезается до нескольких последних символов, и файл не выбран. Что случилось? Это ошибка?

Мой текущий код:

QString fileName = QFileDialog::getOpenFileName(this, "Select file", 
    lastUsedFile, "Image Files (*.png *.jpg *.jpg *.bmp);; JPEG(*.jpg *.jpeg);; PNG(*.png);; BMP(*.bmp)");

if (!fileName.isEmpty())
    lastUsedFile = fileName;

Чего я хотел бы добиться, так это того, чтобы файл был выбран и прокручен.


person Pawel    schedule 20.03.2017    source источник


Ответы (1)


Это третий параметр QFileDialog::getOpenFileName(). И тогда вы должны сохранить его в QSettings.

Например:

QString fileName = QFileDialog::getOpenFileName(
        this, tr("Open file"), 
        Settings.value(DEFAULT_DIR).toString(),
        tr("Images (*.png *.xpm *.jpg)");

if (!fileName.isEmpty()) {
   QDir curDir;
   Settings.setValue(DEFAULT_DIR, curDir.absoluteFilePath(fileName));
}
person michalis    schedule 20.03.2017
comment
Как я уже сказал, это не работает, как ожидалось. Вот пример: !IMAGE Вот что сохраняется и что загружается в диалог (и файл не выбран, имя причины неверно) - person Pawel; 20.03.2017
comment
На самом деле то, что загружается в диалог, должно быть правильным. Вы видите выделение по тексту на скриншоте? Попробуйте нажать кнопку «Домой», и вы увидите, что ввод содержит полное имя файла. На самом деле не знаю, является ли это проблемой Qt или проблемой стандартного диалогового окна открытия файла, поскольку вы используете системный по умолчанию в Windows. Однако вы можете переопределить его с помощью опции DontUseNativeDialog. - person Mikhail Churbanov; 20.03.2017
comment
Я думаю, что это правильно. Не родной диалог показывает правильное имя файла (но, боже мой, это уродливо). Так что должно быть баг родной. Однако файл не выбран, как хотелось бы (как будто он был нажат), можно ли прокрутить диалог до этого файла? И выделить? - person Pawel; 20.03.2017