QFileDialog:获取文件名

时间:2016-07-04 15:25:27

标签: qt qfiledialog

我正在使用Qt 5和QFileDialog。我想限制用户在文件名中提供正斜杠(/)。

我有以下QFileDialog代码来保存文件名。

QFileDialog saveAsdialog(this);
QString filename = saveAsdialog.getSaveFileName(this, tr("Save
file"), ".", tr("Files (*.csv)"));

在对话框中,如果用户在“download”文件夹中提供文件名“abc.csv”,则“getSaveFileName”将返回“/home/user/Downloads/abc.csv”,这是正确的。

但我的问题是当用户在文件名(/)中提出斜杠时,它的行为不正确。

e.g。如果用户想要提供文件名“abc / xyz.csv”,那么我没有得到正确的文件名。

当用户点击“确定”时如何获取正确的文件名“abc / xyz.csv”?

1 个答案:

答案 0 :(得分:2)

请关注此wikipedia link

如您所见,文件名中禁止使用/个字符。因此文件名abc/xyz.csv不正确。

此外,您始终可以检查文件对话框中的当前目录,并根据此信息可以跟踪选定的文件名。试试这个:

QFileDialog saveAsdialog(this);
QString curDir(QDir('.').absolutePath());
connect(&saveAsdialog, &QFileDialog::directoryEntered, [&curDir](const QString& dir) {
    curDir = dir;
});
// We cann't use static member getSaveFileName
//QString filename = saveAsdialog.getSaveFileName(this, tr("Save file"), ".", tr("Files (*.csv)"));
//here manual saveAsdialog setup
...........
if (saveAsdialog.exec() == QDialog::Accepted) {

    QString filename = saveAsdialog.selectedFiles().first(); //add check that list is not empty!!!
    QString f = filename.replace(curDir, "");
}