Qt多个文件过滤器,强制一个扩展名

Qt Multiple file filters, force one extension

本文关键字:一个 扩展名 文件 过滤器 Qt      更新时间:2023-10-16

在用于保存文件的Qt对话框中,我有多个文件过滤器选项。

例如,我的过滤器是 "Text Files (*.txt, *.pdf);;TXT Files (*.txt);;PDF files(*.pdf)" .

这是我的代码:

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setNameFilter(filter.c_str());
dialog.setAcceptMode( QFileDialog::AcceptSave );
dialog.setWindowTitle(WINDOW_TITLE_EXPORT_CLOUD);
if (!dialog.exec())
    return;
QString fileName;
auto    fileName = dialog.selectedFiles().at(0);

现在,用户可能不会引入文件扩展名,因此对话框应该负责根据选定的文件过滤器强制使用文件扩展名。

对于多个扩展名的情况,我可以使用 QDialog::setDefaultSuffix() ,但这还不够,因为如果我将默认后缀设置为 .pdf,用户可以选择 TXT files (*.txt) 过滤器,我会覆盖用户决定。

如何根据所选过滤器强制文件扩展名?

谢谢


还有QFileDialod::selectedNameFilter(),但是基于此我的代码会迫使我事后检查文件是否存在,以免覆盖(有没有办法在 Linux 上使用 QFileDialog 自动向文件添加扩展名)

你只能在之后这样做。

你可以得到selectedNameFilter.然后,您应该检查所选文件名是否与selectedNameFilter具有相同的扩展名。

如果它们不同,您可以选择添加它或更改扩展名。