如何在QFileDialog中设置仅显示无扩展名文件?
解决QFileDialog筛选无扩展名文件的问题
我来帮你搞定这个需求~你现在的代码只能筛选特定文件名的文件,要实现仅显示无扩展名的文件,有两种靠谱的方法:
方法1:使用Shell风格通配符(简单但有局限)
如果你的目标是筛选**文件名中不含.**的文件,可以用Shell通配符[!.]*来匹配,它会选中所有不包含.的文件名。修改你的代码如下:
QString path; QString desktopPath = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0); // 设置过滤器为无扩展名文件,通配符[!.]*匹配不含.的文件名 path = QFileDialog::getOpenFileName( this, tr("Select File"), desktopPath, // 这里不需要硬编码DATAFILE,直接用桌面路径即可 tr("No Extension Files ([!.]*)") );
注意:这种方法不会匹配文件名以.结尾的文件(比如myfile.),如果你的场景需要包含这类文件,这种方法就不太合适。
方法2:自定义筛选函数(精确匹配,推荐)
如果要精确筛选扩展名为空的文件(不管文件名里有没有.,只要后缀为空就算),可以用Qt 5.10及以上支持的自定义筛选函数,这样能更精准地满足需求:
QString path; QString desktopPath = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0); // 创建QFileDialog对象而不是用静态函数,方便自定义筛选 QFileDialog fileDialog(this, tr("Select File"), desktopPath); fileDialog.setFileMode(QFileDialog::ExistingFile); // 设置筛选函数:只接受后缀为空的文件(无扩展名) fileDialog.setFilter([](const QFileInfo& fileInfo) { return fileInfo.suffix().isEmpty(); }); // 显示对话框并获取选中路径 if (fileDialog.exec() == QDialog::Accepted) { path = fileDialog.selectedFiles().first(); }
这种方法会匹配所有扩展名为空的文件,包括myfile和myfile.,完全符合“无扩展名”的定义。另外,你之前代码里的desktopPath + "\\DATAFILE"可以直接改成desktopPath,这样打开对话框时默认显示桌面的所有文件,而不是定位到一个特定文件名上。
内容的提问来源于stack exchange,提问作者mrg95
相关产品推荐
相关产品推荐

