QFileDialog и setDefaultSuffix для Mac Sandbox

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

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

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


person jakumate    schedule 28.07.2015    source источник


Ответы (2)


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

QString suffix = ".txt";  // your suffix here
QString fileName = ... // get filename after QFileDialog work
QFileInfo file(filename);
if(file.suffix().isEmpty()) fileName += suffix ;
person demonplus    schedule 28.07.2015
comment
Спасибо, но это не сработает. Правила песочницы не позволяют изменить имя, введенное пользователем в QFileDialog :( - person jakumate; 28.07.2015
comment
@jakumate Тогда это, вероятно, объясняет, почему Qt не может добавить суффикс после того, как пользователь что-то вводит в песочнице, верно? Только перед... - person demonplus; 28.07.2015

Оказывается, использование статического метода для отображения 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)

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

person jakumate    schedule 12.10.2015