Qt多个文件过滤器,强制一个扩展名
Qt Multiple file filters, force one extension
在用于保存文件的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
具有相同的扩展名。
如果它们不同,您可以选择添加它或更改扩展名。
相关文章:
- C++中的VLA,扩展名为std=C++11
- 如何按文件扩展名引用文件夹中的文件
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- Visual Studio Code "variable " u8 的 C/C++ 扩展名 " " 不是类型名称"
- Makefile by ocaml 和 cpp 扩展名
- CMake 不编译具有非标准扩展名的文件
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 如何在 Windows 上获取带有 c++ 且没有 <dirent.h> 的特定扩展名的所有文件的列表
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 如何在 vscode 扩展名中检索 C/C++ 文件的编译命令
- 通过cMake使用具有自定义文件扩展名的共享库
- 在另一个字符串中插入文件扩展名之前的字符串
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- Qt多个文件过滤器,强制一个扩展名
- CMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
- 如何创建一个不敏感的正则态度以匹配文件扩展名
- 写入一个扩展名不同但名称与所读文件相同的文件