QMimeDatabase 类
QMimeDatabase 类维护了一个 MIME 类型的数据库。 更多...
头文件 | #include <QMimeDatabase> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
注意: 此类中的所有函数都是 线程安全的。
公共类型
枚举 | 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 |
详细描述
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 }
成员类型文档
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(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
为给定的 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类型,则返回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. 的商标。所有其他商标均为各自所有者的财产。