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

Qt:如何在QFileDialog上设置不区分大小写的过滤器?,qt,qt5,file-extension,Qt,Qt5,File Extension,有没有办法在QFileDialog上设置不区分大小写的筛选器 我尝试了文档中的示例: QStringList mimeTypeFilters; mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe) << "image/png" // will show "PNG image (*.png)" << "appli

有没有办法在QFileDialog上设置不区分大小写的筛选器

我尝试了文档中的示例:

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();

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

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

由于
setMimeTypeFilters
setNameFilters
周围的一个方便实用程序,因此您可以阅读后者的

据说:

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

这些扩展名是您为JPEG列出的,小写。
无论如何,mime类型定义如下:

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

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

正如您所做的,您是对的:mime类型在其类型和子类型中不区分大小写,因此您希望与jpg以及jpg匹配

祝你好运。:-)

我可能会在Qt跟踪器上打开一个bug,以了解他们对此的看法

编辑

如注释中所述,mime类型不区分大小写这一事实实际上并不影响文件扩展名。
因此,即使<代码>图像/JPEG < /代码>和<代码>图像/JPEG < /代码>是相同的,没有什么可以迫使框架考虑<代码> .jpg < /c>和<代码> .jpg < /c>文件一起。

回到文档中的示例,我们有以下内容:

mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe)
    << "image/png" // will show "PNG image (*.png)"
    << "application/octet-stream"; // will show "All files (*)" 

mimetype过滤器类型、子类型和参数名称不区分大小写=>但这并不意味着相关的文件扩展名列表也不区分大小写。@peppe有趣的观点。因此,即使
image/jpeg
image/jpeg
是相同的,但这并不意味着文件的扩展名是相同的。这确实是有道理的,即使我说过相反的话。这样看来,它似乎更像是RFC没有明确定义的东西,因此它可能是正确的,也可能不是Qt的工作方式。尽管如此,我认为Qt应该对大小写进行不敏感的过滤(不是因为规范这么说,而是因为愚蠢的窗口),我认为这实际上也是规范中一个相当模糊的角落。
mimeTypeFilters << "image/jpeg" // will show "JPEG image (*.jpeg *.jpg *.jpe)
    << "image/png" // will show "PNG image (*.png)"
    << "application/octet-stream"; // will show "All files (*)"