17

我尝试在 Mac OS X 中创建“另存为...”对话框。但我不想使用QFileDialog::getSaveFileName()函数,因为由该函数创建的对话框在 Mac OS X Lion 中并不是真正原生的所以我决定创建对话框作为QFileDialog对象:

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()函数,但它只设置保存的目录,没有保存文件的名称。

我在 Mac OS X Lion 上使用 Qt 4.8.1。

4

4 回答 4

13

我发现selectFile("myFileName");只有在文件实际存在时才使用。就我而言,目的是创建一个新文件,并可选择覆盖现有文件。

对我有用的解决方案(Qt 5.3.2)如下:

QFileDialog svDlg;

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

在上面的例子中,preferredName 是一个包含 "C:/pre-selected-name.txt" 的 QString

于 2015-03-05T12:24:15.893 回答
7

为将来的访问者重申评论中的内容,以下行将“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

于 2015-02-19T00:30:16.880 回答
3
QString dir = QDir::homePath();
QString name = "test.txt";

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

如果您设置“dir”参数,并且 dir 是“file”(存在或不存在),则在 windows 中您将拥有默认名称。

于 2018-09-14T04:11:58.143 回答
1

使用当前的 QT 版本 (5.x),您可以使用函数调用directory中的参数设置首选文件名QFileDialog.getSaveFileName()

QFileDialog.getSaveFileName( directory = 'preferredFileName.txt' )

文档:http ://doc.qt.io/qt-5/qfiledialog.html#getSaveFileName

于 2018-01-16T10:24:22.630 回答