Класс 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, MatchMode mode = MatchDefault) const |
| QMimeType | mimeTypeForFile(const QString &fileName, 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 предоставляется проектом freedesktop.org shared-mime-info. Если база данных типов 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 приведет к поиску определений MIME в /opt/myapp/share/mime/packages/.
Вот пример 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», где 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.
Документация по типам членов
Перечисление QMimeDatabase::MatchMode
Это перечисление определяет, как выполняется сопоставление файла с типом MIME.
| Постоянная | Значение | Описание |
|---|---|---|
QMimeDatabase::MatchDefault |
0x0 |
И имя файла, и содержимое используются для поиска совпадения |
QMimeDatabase::MatchExtension |
0x1 |
Используется только имя файла для поиска совпадения |
QMimeDatabase::MatchContent |
0x2 |
Используется содержимое файла для поиска совпадения |
Документация по функциям членов
QMimeDatabase::QMimeDatabase()
Конструирует объект QMimeDatabase.
Создание экземпляра QMimeDatabase каждый раз, когда требуется выполнить поиск, вполне допустимо. Разбор типов MIME выполняется по мере необходимости (при установке 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, 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, MatchMode mode = MatchDefault) const
Возвращает тип MIME для файла с именем fileName, используя mode.
Это перегруженная функция.
QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
Возвращает тип MIME для заданного fileName и данных device.
Эта перегрузка может быть полезна, когда файл удаленный, и мы начали загружать часть его данных в устройство. Это позволяет выполнять полное сопоставление типов MIME для удаленных файлов.
Если устройство не открыто, оно будет открыто этой функцией и закрыто после завершения определения типа MIME.
Всегда возвращается допустимый тип MIME. Если данные устройства не соответствуют никакому известному типу MIME, возвращается тип MIME по умолчанию (application/octet-stream).
Этот метод анализирует как имя файла, так и содержимое файла, если это необходимо. Расширение файла имеет приоритет перед содержимым, но содержимое будет использоваться, если расширение файла неизвестно или соответствует нескольким типам MIME.
QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
Возвращает тип MIME для заданного fileName и данных устройства.
Этот перегруз может быть полезен, когда файл удалённый, и мы начали загружать некоторые его данные. Это позволяет выполнить полное сопоставление типа 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.6/qmimedatabase.html