关于qt:QFileDialog:获取文件名

QFileDialog : get file name

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

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

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

在对话框中,如果用户在"下载"文件夹中给出文件名" abc.csv",则" getSaveFileName"返回正确的" /home/user/Downloads/abc.csv"。

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

例如 如果用户想给文件名" abc / xyz.csv",那么我没有得到正确的文件名。

用户单击"确定"时如何获取正确的文件名" abc / xyz.csv"?


请观看此维基百科链接。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,"");
}