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 у вас будет имя по умолчанию.
Ответ 4
В текущей версии QT (5.x) вы можете установить предпочитаемое имя файла с аргументом directory
в вызове функции QFileDialog.getSaveFileName()
:
QFileDialog.getSaveFileName( directory = 'preferredFileName.txt' )
документы: http://doc.qt.io/qt-5/qfiledialog.html#getSaveFileName