QMimeDatabase 类

QMimeDatabase 类维护了一个 MIME 类型的数据库。 更多...

头文件 #include <QMimeDatabase>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 此类中的所有函数都是 线程安全的

公共类型

枚举MatchMode { MatchDefault, MatchExtension, MatchContent }

公共函数

QMimeDatabase()
~QMimeDatabase()
QList<QMimeType>allMimeTypes() const
QMimeTypemimeTypeForData(const QByteArray &data) const
QMimeTypemimeTypeForData(QIODevice *device) const
QMimeTypemimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = MatchDefault) const
QMimeTypemimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = MatchDefault) const
QMimeTypemimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
QMimeTypemimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
QMimeTypemimeTypeForName(const QString &nameOrAlias) const
QMimeTypemimeTypeForUrl(const QUrl &url) const
QList<QMimeType>mimeTypesForFileName(const QString &fileName) const
QStringsuffixForFileName(const QString &fileName) const

详细描述

MIME 类型数据库由 freedesktop.org 的 shared-mime-info 项目提供。如果无法在系统上找到 MIME 类型数据库(在大多数 Windows、macOS 和 iOS 系统中就是这样),Qt 将使用自己的副本。

想要定义自定义 MIME 类型的应用程序需要将一个 XML 文件安装到搜索 MIME 定义的地址。可以查询这些地址

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

在典型的 Unix 系统上,这将是 /usr/share/mime/packages/,但也可能通过设置环境变量 XDG_DATA_DIRS 来扩展目录列表。例如,将 /opt/myapp/share 添加到 XDG_DATA_DIRS 将导致在 /opt/myapp/share/mime/packages/ 中搜索 MIME 定义。

以下是一个 MIME XML 的示例

<?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
}

另请参阅QMimeTypeMIME类型浏览器

成员类型文档

enum QMimeDatabase::MatchMode

此枚举指定了如何执行将文件与MIME类型相匹配的操作。

常量描述
QMimeDatabase::MatchDefault0x0同时使用文件名和内容查找匹配项
QMimeDatabase::MatchExtension0x1仅使用文件名查找匹配项
QMimeDatabase::MatchContent0x2使用文件内容查找匹配项

成员函数文档

QMimeDatabase::QMimeDatabase()

构造一个QMimeDatabase对象。

在每次需要执行查找时创建QMimeDatabase的一个实例是完全可以接受的。mimetypes的解析是按需进行的(在安装了shared-mime-info时或当第一次实例化时直接解析XML文件)。

[noexcept] QMimeDatabase::~QMimeDatabase()

销毁QMimeDatabase对象。

QList<QMimeType> QMimeDatabase::allMimeTypes() const

返回所有可用MIME类型的列表。

这可以用于向用户显示所有MIME类型,例如在MIME类型编辑器中。但在其他情况下除非真正必要,否则请使用mimeTypeForXxx方法,因为出于性能原因。

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

返回data的MIME类型。

总是返回有效的MIME类型。如果data不匹配任何已知MIME类型数据,则返回默认MIME类型(application/octet-stream)。

QMimeType QMimeDatabase::mimeTypeForData(QIODevice *device) const

返回device中的数据的MIME类型。

总是返回有效的MIME类型。如果device中的数据不匹配任何已知MIME类型数据,则返回默认MIME类型(application/octet-stream)。

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

返回fileInfo的MIME类型。

总是返回有效的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

使用 mode 为文件命名 fileName 返回MIME类型。

这是一个重载函数。

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

为给定的 fileNamedevice 数据返回MIME类型。

当文件是远程的,并且我们在设备中开始下载其部分数据时,此重载非常有用。这允许对远程文件执行完整的MIME类型匹配。

如果没有打开设备,此函数将打开它,并在完成MIME类型检测后关闭它。

始终返回有效的MIME类型。如果没有 device 数据匹配任何已知MIME类型数据,则返回默认MIME类型 (application/octet-stream)。

如果需要,此方法将同时考虑文件名和文件内容。文件扩展名优先于内容,但如果文件扩展名未知或匹配多个MIME类型,则使用内容。

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

为给定的 fileName 和设备 data 返回MIME类型。

当文件是远程的,并且我们开始下载其部分数据时,此重载非常有用。这允许对远程文件执行完整的MIME类型匹配。

总是返回有效的MIME类型。如果data不匹配任何已知MIME类型数据,则返回默认MIME类型(application/octet-stream)。

如果需要,此方法将同时考虑文件名和文件内容。文件扩展名优先于内容,但如果文件扩展名未知或匹配多个MIME类型,则使用内容。

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

如果找到了 nameOrAlias 或无效的MIME类型,则返回MIME类型。

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

返回与url对应的 MIME 类型。

如果 URL 是本地文件,将调用 mimeTypeForFile

否则,基于文件名进行匹配,除了文件名意义不大的方案,如 HTTP。此方法始终返回 HTTP URLs 的默认 MIME 类型,请使用 QNetworkAccessManager 正确处理 HTTP URLs。

总是返回有效的 MIME 类型。如果url与任何已知 MIME 类型数据不匹配,则返回默认 MIME 类型(application/octet-stream)。

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

返回与文件名fileName对应的 MIME 类型。

如果文件名不匹配任何已知模式,则返回空列表。如果多个 MIME 类型匹配此文件,则它们都将返回。

此函数不会尝试打开文件。要同时使用内容来确定 MIME 类型,请使用 mimeTypeForFile() 或 mimeTypeForFileNameAndData()。

另请参阅mimeTypeForFile

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

返回 MIME 数据库中所知的文件名fileName的后缀。

这允许预先选择“tar.bz2”用于foo.tar.bz2,但对于my.file.with.dots.txt仍然只有“txt”。

© 2024 Qt 公司有限公司。 本文档中包含的文档贡献是各自所有者的版权。 本文档受GNU 自由文档许可证1.3版的条款许可,由自由软件基金会发布。 Qt 和相关标志是芬兰和/或全球其他国家的Qt公司 Ltd. 的商标。所有其他商标均为各自所有者的财产。