Поскольку setMimeTypeFilters
утилита удобства вокруг setNameFilters
, вы можете прочитать documentation последнего.
Говорят, что:
setMimeTypeFilters имеет то преимущество, что все возможные фильтры имен для каждого типа файла. Например, изображения в формате JPEG имеют три возможных расширения:
Эти расширения являются теми, которые вы указали для JPEG, в нижнем регистре.
Во всяком случае, тип мим is case insensitive по определению:
тип, подтип, и имена параметров не чувствительны к регистру. Например, TEXT, Text и TeXt являются эквивалентными медиа-типами верхнего уровня.
Это, как говорят, идиосинкратия Qt. Диалоговое окно файла хочет, чтобы пользователи отображали принятые типы как регулярное выражение, внутренний определенный тип mime определяет эти типы как строчные, поэтому он не удается получить их, если в верхнем регистре, хотя RFC указывает на противоположное.
Как вы это сделали, вы правы: типы mime не чувствительны к регистру в своих типах и подтипах, поэтому вы ожидаете соответствия JPG, а также JPG.
Удачи. :-)
Я бы, вероятно, открыл ошибку на Qt tracker, чтобы узнать, что они говорят об этом.
EDIT
Как уже упоминалось в комментариях, тот факт, что тип мим чувствителен к регистру, не влияет на самом деле расширение файла.
Из-за этого, даже если 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 (*)"
Здесь говорится, что для типа пантомимы image/jpeg
(независимо от того, что capitolized), принятые расширения устанавливаются jpeg
и другие ,
Кроме того, я приведу еще раз, что следует из документации:
Например, изображения JPEG имеют три возможных расширений
Эти расширения, очевидно, jpeg
jpg
и jpe
, в нижнем регистре.
Итак, я все еще считаю это ошибкой в способе, которым Qt подходит к проблеме, но можно утверждать, что проблема заключается в том, что вы фактически используете расширение, которое не рассматривается внутренним сопоставлением для типов mime ,
* Тип, подтип и имена параметров не чувствительны к регистру * => это делает ** не ** подразумевает, что связанный список расширений файлов также не чувствителен к регистру. – peppe
@peppe Интересная точка зрения. Таким образом, даже если 'image/jpeg' и' image/JPEG' совпадают, это не означает, что для расширений файлов. Это действительно имеет смысл, даже если бы я сказал обратное. Таким образом, это похоже на нечто большее, чем не определен RFC, поэтому может быть правильным или нет, как работает Qt. – skypjack
Это было сказано, я думаю, что Qt должен фильтровать регистр нечувствительно (не потому, что спецификация говорит так, но из-за глупых Windows) – peppe