Spec-Zone.ru › Qt 5.11

Класс QMimeDatabase

Класс QMimeDatabase поддерживает базу данных MIME-типов. Подробнее...

Заголовок: #include <QMimeDatabase>
qmake: QT += core
С тех пор: Qt 5.0
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются безопасными для потоков.

Публичные типы

Перечисление MatchMode { MatchDefault, MatchExtension, MatchContent }

Публичные функции

QMimeDatabase()
~QMimeDatabase()
QList<QMimeType> allMimeTypes() const
QMimeType mimeTypeForData(const QByteArray &data) const
QMimeType mimeTypeForData(QIODevice *device) const
QMimeType mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = MatchDefault) const
QMimeType mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = MatchDefault) const
QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
QMimeType mimeTypeForName(const QString &nameOrAlias) const
QMimeType mimeTypeForUrl(const QUrl &url) const
QList<QMimeType> mimeTypesForFileName(const QString &fileName) const
QString suffixForFileName(const QString &fileName) const

Подробное описание

Класс QMimeDatabase поддерживает базу данных MIME-типов.

База данных MIME-типов предоставляется проектом shared-mime-info freedesktop.org. Если база данных MIME-типов не найдена в системе, как это обычно бывает на большинстве систем Windows, macOS и iOS, Qt будет использовать свою собственную копию.

Приложения, которые хотят определить пользовательские MIME-типы, должны установить XML-файл в места, где ищутся определения MIME. Эти места можно запросить с помощью

QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"),
                          QStandardPaths::LocateDirectory);

В типичной системе Unix это будет /usr/share/mime/packages/, но также можно расширить список каталогов, задав переменную среды XDG_DATA_DIRS. Например, добавление /opt/myapp/share в XDG_DATA_DIRS приведет к тому, что /opt/myapp/share/mime/packages/ будет проверяться на наличие определений MIME.

Вот пример XML MIME:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
  <mime-type type="application/vnd.qt.qmakeprofile">
    <comment xml:lang="en">Qt qmake Profile</comment>
    <glob pattern="*.pro" weight="50"/>
  </mime-type>
</mime-info>

Для получения более подробной информации о синтаксисе XML-определений MIME, включая определение «магии» для обнаружения MIME-типов на основе данных, ознакомьтесь со спецификацией Shared Mime Info по адресу http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html

В системах Unix используется двоичный кэш для повышения производительности. Этот кэш генерируется командой «update-mime-database path», где путь будет /opt/myapp/share/mime в приведенном выше примере. Убедитесь, что эта команда выполняется при установке файла определения MIME-типа.

QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile(fileName);
if (mime.inherits("text/plain")) {
    // The file is plain text, we can display it in a QTextEdit
}

См. также QMimeType и Пример обозревателя MIME-типов.

Документация по типу членов

Перечисление QMimeDatabase::MatchMode

Это перечисление определяет, как выполняется сопоставление файла с MIME-типом.

Константа Значение Описание
QMimeDatabase::MatchDefault 0x0 Используются как имя файла, так и содержимое файла для поиска совпадения
QMimeDatabase::MatchExtension 0x1 Используется только имя файла для поиска совпадения
QMimeDatabase::MatchContent 0x2 Используется содержимое файла для поиска совпадения

Документация по функциям-членам

QMimeDatabase::QMimeDatabase()

Конструирует объект QMimeDatabase.

Совершенно нормально создавать экземпляр QMimeDatabase каждый раз, когда вам нужен поиск. Разбор mimetypes выполняется по требованию (если установлен shared-mime-info) или при создании первого экземпляра (при разборе XML-файлов напрямую).

QMimeDatabase::~QMimeDatabase()

Удаляет объект QMimeDatabase.

QList<QMimeType> QMimeDatabase::allMimeTypes() const

Возвращает список всех доступных MIME-типов.

Это может быть полезно для отображения всех MIME-типов пользователю, например, в редакторе MIME-типов. Однако не используйте, если это не действительно необходимо в других случаях. Вместо этого используйте методы mimeTypeForXxx() для повышения производительности.

QMimeType QMimeDatabase::mimeTypeForData(const QByteArray &data) const

Возвращает MIME-тип для data.

Всегда возвращается допустимый MIME-тип. Если data не соответствует никакому известному MIME-типу данных, возвращается стандартный MIME-тип (application/octet-stream).

QMimeType QMimeDatabase::mimeTypeForData(QIODevice *device) const

Возвращает MIME-тип для данных в device.

Всегда возвращается допустимый MIME-тип. Если данные в device не соответствуют никакому известному MIME-типу данных, возвращается стандартный MIME-тип (application/octet-stream).

QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = MatchDefault) const

Возвращает MIME-тип для fileInfo.

Всегда возвращается допустимый MIME-тип.

Стандартный алгоритм сопоставления рассматривает как имя файла, так и содержимое файла, если необходимо. Расширение файла имеет приоритет над содержимым, но содержимое будет использоваться, если расширение файла неизвестно или соответствует нескольким MIME-типам. Если fileInfo — это символическая ссылка в Unix, вместо неё будет использован файл, на который она ссылается. Если файл не соответствует никакому известному шаблону или данным, возвращается стандартный MIME-тип (application/octet-stream).

Если mode установлен в MatchExtension, используется только имя файла, а не содержимое файла. Файл даже не обязательно должен существовать. Если имя файла не соответствует ни одному известному шаблону, возвращается стандартный MIME-тип (application/octet-stream). Если нескольким MIME-типам соответствует этот файл, возвращается первый (в алфавитном порядке).

Если mode установлен в MatchContent, и файл доступен для чтения, для определения MIME-типа используется только содержимое файла. Это эквивалентно вызову mimeTypeForData с QFile в качестве входного устройства.

fileInfo может ссылаться на абсолютный или относительный путь.

См. также QMimeType::isDefault() и mimeTypeForData().

QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = MatchDefault) const

Возвращает MIME-тип для файла с именем fileName, используя mode.

Это перегруженная функция.

QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const

Возвращает MIME-тип для заданного fileName и данных device.

Этот перегруз может быть полезен, когда файл удалённый, и мы начали загружать часть его данных на устройство. Это позволяет выполнять полное сопоставление типа MIME для удалённых файлов.

Если устройство не открыто, оно будет открыто этой функцией и закрыто после завершения определения типа MIME.

Всегда возвращается допустимый тип MIME. Если данные device не соответствуют ни одному известному типу MIME, возвращается тип MIME по умолчанию (application/octet-stream).

Этот метод анализирует и имя файла, и содержимое файла, если это необходимо. Расширение файла имеет приоритет над содержимым, но содержимое будет использовано, если расширение файла неизвестно или соответствует нескольким типам MIME.

QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const

Возвращает тип MIME для заданного fileName и данных устройства data.

Этот перегруз может быть полезен, когда файл удалённый, и мы начали загружать часть его данных. Это позволяет выполнять полное сопоставление типа MIME для удалённых файлов.

Всегда возвращается допустимый тип MIME. Если данные data не соответствуют ни одному известному типу MIME, возвращается тип MIME по умолчанию (application/octet-stream).

Этот метод анализирует и имя файла, и содержимое файла, если это необходимо. Расширение файла имеет приоритет над содержимым, но содержимое будет использовано, если расширение файла неизвестно или соответствует нескольким типам MIME.

QMimeType QMimeDatabase::mimeTypeForName(const QString &nameOrAlias) const

Возвращает тип MIME для nameOrAlias или недопустимый тип, если таковой не найден.

QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const

Возвращает тип MIME для url.

Если URL указывает на локальный файл, это вызывает mimeTypeForFile.

В противном случае сопоставление выполняется только по имени файла, за исключением схем, где имена файлов не имеют большого значения, например, HTTP. Этот метод всегда возвращает тип MIME по умолчанию для HTTP-URL, используйте QNetworkAccessManager для правильной обработки HTTP-URL.

Всегда возвращается допустимый тип MIME. Если url не соответствует никакому известному типу MIME, возвращается тип MIME по умолчанию (application/octet-stream).

QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) const

Возвращает типы MIME для имени файла fileName.

Если имя файла не соответствует никакому известному шаблону, возвращается пустой список. Если нескольким типам MIME соответствует этот файл, они все возвращаются.

Эта функция не пытается открыть файл. Для использования содержимого при определении типа MIME используйте mimeTypeForFile() или mimeTypeForFileNameAndData() вместо этого.

См. также mimeTypeForFile().

QString QMimeDatabase::suffixForFileName(const QString &fileName) const

Возвращает суффикс для файла fileName, как известно базе данных MIME.

Это позволяет предварительно выбрать «tar.bz2» для foo.tar.bz2, но всё ещё только «txt» для my.file.with.dots.txt.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qmimedatabase.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API