QFileDialog: автоматически добавлять расширение при сохранении файла?

При использовании QFileDialog для сохранения файла и указании расширения (например, *.pdf) и вводе пользователем имени без этого расширения сохраненный файл также не имеет этого расширения.
Пример кода:

QFileDialog fileDialog(this, "Choose file to save");
fileDialog.setNameFilter("PDF-Files (*.pdf)");
fileDialog.exec();
QFile pdfFile(fileDialog.selectedFiles().first());

теперь, когда пользователь вводит «foo» в качестве имени, файл будет сохранен как «foo», а не как «foo.pdf». Таким образом, QFileDialog не добавляет расширение автоматически. Мой вопрос: как я могу это изменить?


person Berschi    schedule 23.12.2009    source источник
comment
Документация Qt понятна и исчерпывающая, мне интересно, как вы могли пропустить QFileDialog::setDefaultSuffix()   -  person Julien-L    schedule 23.12.2009
comment
Похоже, много работы нужно сделать так же, как: QFileDialog::getSaveFileName(). Я что-то пропустил?   -  person Andy M    schedule 23.12.2009
comment
@Julien L.: Обычно я пытаюсь ответить на вопрос, а не сомневаться в необходимости, особенно для таких простых запросов, как этот. Однако, если бы ОП открыл страницу, на которую я ссылался, и искал расширение, он нашел бы только пример для setNameFilter и ничего больше, связанного с суффиксами по умолчанию.   -  person Caleb Huitt - cjhuitt    schedule 24.12.2009
comment
@cjhuitt: Именно поэтому я задал этот вопрос (на который легко ответить).   -  person Berschi    schedule 24.12.2009


Ответы (1)


Вы можете использовать QFileDialog::setDefaultSuffix() :

Это свойство содержит суффикс, добавленный к имени файла, если не был указан другой суффикс.

Это свойство указывает строку, которая будет добавлена ​​к имени файла, если оно уже не имеет суффикса. Суффикс обычно используется для обозначения типа файла (например, txt указывает на текстовый файл).

person Caleb Huitt - cjhuitt    schedule 23.12.2009
comment
Как это можно сделать, если разрешено несколько типов файлов? например, Все файлы (.pdf *.txt);;PDF-файлы (.pdf), и пользователь выбрал вторую запись, PDF-файлы? - person manatttta; 30.05.2016
comment
@manatttta Хотя это не совсем тривиально, должна быть возможность создать подкласс QFileDialog, подключить сигнал filterSelected() к слоту, который ищет строку фильтра для первого расширения файла, а затем вызывает setDefaultSuffix() с ним. - person Parker Coates; 06.02.2017