2009-12-23 2 views
9

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

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

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

+1

Qt документации ясно и всеобъемлющим, я задаюсь вопросом, как бы вы, возможно, пропустили QFileDialog :: setDefaultSuffix() –

+1

Похоже, много работ просто делать то же самое, как: QFileDialog :: GetSaveFileName(). Я что-то пропустил? –

+3

@Julien L .: Обычно я пытаюсь ответить на вопрос, а не спрашивать о необходимости, особенно для простых запросов, подобных этому. Однако, если бы OP открыла страницу, с которой я связался, и искал «расширение», он бы нашел только пример для «setNameFilter», и ничто другое не связано с суффиксами по умолчанию. –

ответ

17

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

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

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

+3

Как это можно сделать, если разрешено несколько типов файлов? например, «Все файлы (* .pdf * .txt);) PDF-файлы (*. pdf)», и пользователь выбрал вторую запись, PDF-файлы? – manatttta

+1

@manatttta Хотя это не совсем тривиально, должно быть возможно подклассы 'QFileDialog', подключить сигнал' filterSelected() 'к слоту, который ищет строку фильтра для первого расширения файла, а затем вызывает с ним' setDefaultSuffix() ' , –