问:如何在QFileDialog上设置不区分大小写的过滤器?

时间:2016-01-18 15:22:44

标签: qt qt5 file-extension

有没有办法在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

https://bugreports.qt.io/browse/QTBUG-51712

2 个答案:

答案 0 :(得分:1)

由于setMimeTypeFilterssetNameFilters周围的便利工具,因此您可以阅读后者的documentation

据说:

  

setMimeTypeFilters的优点是为每种文件类型提供所有可能的名称过滤器。例如,JPEG图像有三种可能的扩展

这些扩展名是您为JPEG列出的小写字母 无论如何,根据定义,mime类型is case insensitive

  

类型,子类型和参数名称不区分大小写。例如,TEXT,Text和TeXt都是等效的顶级媒体类型。

那就是说,这似乎是Qt的特质。文件对话框希望用户将接受的类型列为正则表达式,内部定义的mime类型将这些类型定义为小写,因此即使RFC表示相反,它也无法在大写时获取它们。

正如你所做的那样,你是对的:mime类型在它们的类型和子类型中不区分大小写,因此你希望匹配jpg和JPG。

祝你好运。 : - )

我可能会在Qt跟踪器上打开一个错误,知道他们对此有何看法。

<强> 修改

如评论中所述,mime类型不区分大小写这一事实实际上并不影响文件扩展名。
因此,即使image/jpegimage/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图像有三种可能的扩展名

这些扩展程序显然是jpegjpgjpe,小写。

所以,我仍然认为这是Qt解决问题的方式中的一个错误,但有人可以说问题在于你实际上正在使用mime类型的内部映射不考虑的扩展。

答案 1 :(得分:0)

您如何尝试使用名称过滤器?它应该是这样的:

QFileDialog f(0, tr("Select file(s)"),QDir::homePath(),
              tr("Audio files(*.mp3 *.ogg *.wav *.flac);;All files(*)"));