QFileDialog и setDefaultSuffix для Mac Sandbox

Я хотел бы установить расширение файла по умолчанию в QFileDialog для сохранения файлов в моем приложении (необходимо запустить в песочнице магазина приложений Mac). Поведение по умолчанию setDefaultSuffix на Mac (без песочницы) это то, что он добавляет расширение к любому имени, которое вводит пользователь.

Это работает по-другому, когда песочница включена; он просто добавляет строку расширения в начале взаимодействия, но когда пользователь удаляет предложенное имя файла (с расширением) и вводит его без расширения, файл из QFileDialog не включает суффикс. Есть ли способ взломать Dialog, чтобы вести себя так же в песочнице?

Я использую Qt 4.8.5 (сейчас нет возможности обновить)

1

Решение

Я не думаю, что вы можете изменить поведение песочницы Mac, но вы можете добавить простой обходной путь для Mac, например:

QString suffix = ".txt";  // your suffix here
QString fileName = ... // get filename after QFileDialog work
QFileInfo file(filename);
if(file.suffix().isEmpty()) fileName += suffix ;
1

Другие решения

Оказывается, использование статического метода для отображения QFileDialog позволяет использовать правильный суффикс по умолчанию для работы в песочнице Mac, поэтому вместо создания экземпляра QFileDialog и установки суффикса по умолчанию просто используйте:

getSaveFileName(QWidget * parent = 0, const QString & caption = QString(),
const QString & dir = QString(), const QString & filter = QString(),
QString * selectedFilter = 0, Options options = 0)

с установленным фильтром, чтобы разрешить только нужные вам расширения.

1