QFileDialog: как установить имя файла по умолчанию в диалоговом окне "Сохранить как..."

Я пытаюсь создать диалог "Сохранить как..." в Mac OS X. Но я не хочу использовать функцию QFileDialog::getSaveFileName(), потому что диалог, созданный этой функцией, НЕ действительно -натив в Mac OS X Lion. Поэтому я решил создать диалог как QFileDialog object:

auto export_dialog( new QFileDialog( main_window ) );
export_dialog->setWindowModality( Qt::WindowModal );
export_dialog->setFileMode( QFileDialog::AnyFile );
export_dialog->setAcceptMode( QFileDialog::AcceptSave );

Все работает отлично, кроме одной проблемы. Я не могу установить имя по умолчанию для сохраненного файла, поэтому пользователь должен вводить это имя вручную каждый раз. Я знаю, что функция QFileDialog::getSaveFileName() позволяет установить имя файла по умолчанию через третий аргумент, dir (http://qt-project.org/doc/qt-4.8/qfiledialog.html#getSaveFileName). Но как установить это имя по умолчанию без этой функции?

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

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

Я использую Qt 4.8.1 для Mac OS X Lion.

Заранее благодарим за помощь.

Ответ 1

Повторяя то, что было в комментариях для будущих посетителей, следующая строка помещает "myFileName" в качестве имени по умолчанию в QFileDialog:

export_dialog->selectFile("myFileName");

Обсуждение: http://www.qtcentre.org/threads/49434-QFileDialog-set-default-name?highlight=QFileDialog

Не очень полезные документы: http://qt-project.org/doc/qt-4.8/qfiledialog.html#selectFile

Ответ 2

Я искал google для set default filename qfiledialog и произошел в этом обсуждении.

Я обнаружил, что использование selectFile("myFileName"); работает только в том случае, если файл действительно существует. В моем случае целью является создание нового файла с возможностью перезаписи существующего файла.

Решение, которое сработало для меня (Qt 5.3.2), было следующим:

QFileDialog svDlg;

QString saveFileName = svDlg.getSaveFileName(this, caption, preferredName, filter);

В приведенном выше примере preferredName представляет собой QString, которая содержит "C:/pre-selected-name.txt"

Надеюсь, что поможет

Ответ 3

QString dir = QDir::homePath();
QString name = "test.txt";

QFileDialog::getSaveFileName(nullptr, tr("save file"), dir + "/" + name, tr("TXT (*.txt)"));

Если вы установите аргумент "dir", а dir - это "файл" (существует или нет), в Windows у вас будет имя по умолчанию.