QMimeDatabase Class
QMimeDatabase 类维护一个 MIME 类型数据库。更多
Header: | #include <QMimeDatabase> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
注意:该类中的所有函数都是线程安全的。
公共类型
enum | MatchMode { MatchDefault, MatchExtension, MatchContent } |
公共函数
QMimeDatabase() | |
~QMimeDatabase() | |
QList<QMimeType> | allMimeTypes() const |
QMimeType | mimeTypeForData(QIODevice *device) const |
QMimeType | mimeTypeForData(const QByteArray &data) 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 |
详细说明
MIME 类型数据库由 freedesktop.org shared-mime-info 项目提供。如果在系统中找不到 MIME 类型数据库(如在大多数 Windows、macOS 和 iOS 系统中),Qt 将使用自己的副本。
想要定义自定义 MIME 类型的应用程序需要在搜索 MIME 定义的位置安装一个 XML 文件。可以使用
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 类型,请阅读共享 MIME 信息规范,网址是 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 类型浏览器。
成员类型文档
enum QMimeDatabase::MatchMode
该枚举指定如何将文件与 MIME 类型相匹配。
常量 | 值 | 描述 |
---|---|---|
QMimeDatabase::MatchDefault | 0x0 | 同时使用文件名和内容查找匹配项 |
QMimeDatabase::MatchExtension | 0x1 | 仅使用文件名查找匹配 |
QMimeDatabase::MatchContent | 0x2 | 文件内容用于查找匹配文件 |
成员函数文档
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(QIODevice *device) const
返回device 中数据的 MIME 类型。
返回的总是有效的 MIME 类型。如果device 中的数据与任何已知 MIME 类型的数据不匹配,则返回默认 MIME 类型(application/octet-stream)。
QMimeType QMimeDatabase::mimeTypeForData(const QByteArray &data) const
返回data 的 MIME 类型。
返回的总是有效的 MIME 类型。如果data 与任何已知 MIME 类型数据不匹配,则返回默认 MIME 类型(application/octet-stream)。
QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = MatchDefault) const
返回fileInfo 的 MIME 类型。
返回的总是有效的 MIME 类型。
默认匹配算法会同时查看文件名和文件内容(如有必要)。文件扩展名优先于文件内容,但如果文件扩展名未知或匹配多个 MIME 类型,则会使用文件内容。如果fileInfo 是 Unix 符号链接,则将使用其指向的文件。如果文件与任何已知模式或数据不匹配,将返回默认 MIME 类型(应用程序/八进制流)。
当mode 设置为MatchExtension 时,只会使用文件名,而不会使用文件内容。文件甚至不必存在。如果文件名与任何已知模式不匹配,则返回默认 MIME 类型(应用程序/八进制流)。如果有多个 MIME 类型与该文件匹配,则返回第一个(按字母顺序)。
当mode 设置为MatchContent 且文件可读时,将仅使用文件内容来确定 MIME 类型。这相当于以QFile 作为输入设备调用mimeTypeForData 。
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
返回给定fileName 和device 数据的 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 类型,如果没有,则返回无效类型。
QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const
返回url 的 MIME 类型。
如果 URL 是本地文件,则调用mimeTypeForFile 。
否则,将仅根据文件名进行匹配,但文件名意义不大的方案(如 HTTP)除外。该方法总是返回 HTTP URL 的默认 MIME 类型,请使用QNetworkAccessManager 正确处理 HTTP URL。
返回的总是有效的 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 的后缀。
这样就可以为 foo.tar.bz2 预选 "tar.bz2",而为 my.file.with.dots.txt 预选 "txt"。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.