有没有办法在QFileDialog上设置不区分大小写的过滤器。
我尝试了doc中的示例:
servlet://...
但是对话框只显示linux上文件扩展名较低的jpeg。
使用QStringList mimeTypeFilters;
mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe)
<< "image/png" // will show "PNG image (*.png)"
<< "application/octet-stream"; // will show "All files (*)"
QFileDialog dialog(this);
dialog.setMimeTypeFilters(mimeTypeFilters);
dialog.exec();
也不起作用。
修改
仅在 nativ (Ubuntu)文件对话框中出现此问题。 设置以下选项可以解决问题,但如果它也适用于nativ文件对话框,那就太好了。
setNameFilter
答案 0 :(得分:1)
由于setMimeTypeFilters
是setNameFilters
周围的便利工具,因此您可以阅读后者的documentation。
据说:
setMimeTypeFilters的优点是为每种文件类型提供所有可能的名称过滤器。例如,JPEG图像有三种可能的扩展
这些扩展名是您为JPEG列出的小写字母 无论如何,根据定义,mime类型is case insensitive:
类型,子类型和参数名称不区分大小写。例如,TEXT,Text和TeXt都是等效的顶级媒体类型。
那就是说,这似乎是Qt的特质。文件对话框希望用户将接受的类型列为正则表达式,内部定义的mime类型将这些类型定义为小写,因此即使RFC表示相反,它也无法在大写时获取它们。
正如你所做的那样,你是对的:mime类型在它们的类型和子类型中不区分大小写,因此你希望匹配jpg和JPG。
祝你好运。 : - )我可能会在Qt跟踪器上打开一个错误,知道他们对此有何看法。
<强> 修改 强>
如评论中所述,mime类型不区分大小写这一事实实际上并不影响文件扩展名。
因此,即使image/jpeg
和image/JPEG
相同,也没有什么能够迫使框架一起考虑.jpg
和.JPG
个文件。
回到文档中的示例,我们有以下内容:
mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe)
<< "image/png" // will show "PNG image (*.png)"
<< "application/octet-stream"; // will show "All files (*)"
此处声明,对于mime类型image/jpeg
(无论是否已归化),已接受的扩展名设置为jpeg
和其他。{
另外,我再次引用文档中的内容:
例如,JPEG图像有三种可能的扩展名
这些扩展程序显然是jpeg
,jpg
和jpe
,小写。
所以,我仍然认为这是Qt解决问题的方式中的一个错误,但有人可以说问题在于你实际上正在使用mime类型的内部映射不考虑的扩展。
答案 1 :(得分:0)
您如何尝试使用名称过滤器?它应该是这样的:
QFileDialog f(0, tr("Select file(s)"),QDir::homePath(),
tr("Audio files(*.mp3 *.ogg *.wav *.flac);;All files(*)"));