QResource 类

QResource 类提供了一个直接从资源读取的接口。 更多信息...

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

注意:该类中所有函数都是可重入的。

公共类型

枚举压缩 { NoCompression, ZlibCompression, ZstdCompression }

公共函数

QResource(const QString &file = QString(), const QLocale &locale = QLocale())
~QResource()
QStringabsoluteFilePath() const
QResource::CompressioncompressionAlgorithm() const
const uchar *data() const
QStringfileName() const
boolisValid() const
QDateTimelastModified() const
QLocalelocale() const
voidsetFileName(const QString &file)
voidsetLocale(const QLocale &locale)
qint64size() const
QByteArrayuncompressedData() const
qint64uncompressedSize() const

静态公共成员

boolregisterResource(const QString &rccFileName, const QString &mapRoot = QString())
boolregisterResource(const uchar *rccData, const QString &mapRoot = QString())
boolunregisterResource(const QString &rccFileName, const QString &mapRoot = QString())
boolunregisterResource(const uchar *rccData, const QString &mapRoot = QString())

保护函数

QStringListchildren() const
boolisDir() const
boolisFile() const

详细描述

QResource 是一个表示单个资源实体相关的一组数据(以及可能的子项)的对象。QResource 直接提供了对它们原始格式中的字节的访问。以这种方式,直接访问允许读取数据而不需要进行缓冲区复制或间接访问。在将资源实体作为文件交互时,间接访问通常很有用,这可以通过使用 QFile 实现。QResource 后面数据和子项通常编译到应用程序/库中,但也可以在运行时加载资源。在运行时加载时,资源文件将作为一组大数据被加载,然后通过资源树中的引用分块提供。

一个 QResource 可以使用绝对路径加载,也可以将其作为一个以 / 字符根化的文件系统处理,或者以 : 字符根化的资源符号处理。还可以打开一个相对资源,该资源将出现在由 QDir::searchPaths() 返回的路径列表中。

表示文件的 QResource 将有其支持的数据,这些数据可能被压缩,在这种情况下必须使用 qUncompress() 来访问实际数据;通过 QFile 访问时会隐式发生;表示目录的 QResource 将只有子项而没有数据。

动态资源加载

可以使用 registerResource() 函数将资源从应用程序的二进制文件中删除,并在运行时需要时加载。传递给 registerResource() 的资源文件必须是 rcc 创建的二进制资源。有关二进制资源的更多信息,请参阅 The Qt Resource System 文档。

当加载可能根据设置改变或可以被用户编辑然后重新创建的大量应用程序图标时,这通常很有用。资源将立即加载到内存中,这可能是由于单个文件读取操作的结果,或者作为内存映射文件。

这种方法可以证明是一个重大的性能提升,因为只需要加载一个文件,而数据块将通过在 setFileName() 中请求的路径提供。

当最后一个指向资源的 QResource 被销毁时,unregisterResource() 函数会删除对特定文件的引用。如果有 QResource 对象目前引用与未注册文件相关的资源,它们将继续有效,但资源文件本身将从此资源根被移除,因此不会有进一步的 QResource 会创建指向该资源数据的指针。资源本身将在最后指向它的 QResource 被销毁时从内存中取消映射。

损坏和安全

QResource 类对传入的文件执行一些检查,以确定是否支持当前版本的 Qt。这些测试只是为了检查文件标题是否请求了尚未编译入的功能(例如 Zstandard 解压缩)或者文件不是 Qt 的未来版本。它们并不确认整个文件的有效性。

不应在来源不可信的文件上使用 QResource。应用程序应设计成仅尝试加载来源至少与应用程序本身或其插件同样可信的资源文件。

参阅 Qt资源系统QFileQDirQFileInfo

成员类型文档

枚举 QResource::Compression

此枚举由 compressionAlgorithm() 使用,以指示 RCC 工具对有效载荷使用了哪种算法。

常量描述
QResource::NoCompression0内容未经压缩
QResource::ZlibCompression1内容使用 zlib 进行压缩并通过 qUncompress() 函数解压缩。
QResource::ZstdCompression2内容使用 zstd 进行压缩。解压缩时,请使用 zstd 库中的 ZSTD_decompress 函数。

参阅 compressionAlgorithm()。

成员函数文档

QResource::QResource(const QString &file = QString(), const QLocale &locale = QLocale())

构建一个指向 file 的 QResource。使用 locale 加载资源数据的特定本地化。

参阅 QFileInfoQDir::searchPathssetFileNamesetLocale

[noexcept] QResource::~QResource()

释放 QResource 对象的资源。

QString QResource::absoluteFilePath() const

返回此 QResource 表示的实际路径,如果资源是通过 QDir::searchPaths() 找到的,则路径中将显示。

参阅 fileName

[protected] QStringList QResource::children() const

返回此目录中所有资源的列表,如果资源表示文件,则列表为空。

参阅 isDir

QResource::Compression QResource::compressionAlgorithm() const

返回此资源压缩使用的压缩类型(如果有)。如果没有压缩,此函数返回 QResource::NoCompression

如果此函数返回 QResource::ZlibCompression,则可以使用 qUncompress() 函数解压缩数据。直到 Qt 5.13,这是唯一可能的压缩算法。

如果此函数返回 QResource::ZstdCompression,则需要使用 Zstandard 库函数(<zstd.h> 头)。Qt 不提供包装器。

参阅 Zstandard 用户手册

参阅 data() 和 isFile

const uchar *QResource::data() const

返回对由此资源表示的只读数据的直接访问。如果资源已压缩,则返回的数据也进行了压缩。调用者必须解压缩数据或使用 uncompressedData()。如果资源是目录,则返回 nullptr

另请参阅 uncompressedData()、size() 和 isFile()。

QString QResource::fileName() const

返回此 QResource 表示的文件的完整路径,按照传递的方式。

另请参阅 setFileName() 和 absoluteFilePath()。

[protected] bool QResource::isDir() const

如果该资源表示目录并且可能在其内部有 children(),返回 true;如果表示文件,返回 false

另请参阅 isFile()。

[protected] bool QResource::isFile() const

如果资源表示文件并且具有数据支持,返回 true;如果表示目录,返回 false

参阅 isDir

bool QResource::isValid() const

如果资源确实存在于资源层次结构中,返回 true;否则返回 false

QDateTime QResource::lastModified() const

返回文件在上传到资源之前的最后修改日期和时间。

QLocale QResource::locale() const

返回用于定位 QResource 数据的区域设置。

另请参阅 setLocale()。

[static] bool QResource::registerResource(const QString &rccFileName, const QString &mapRoot = QString())

将在资源树中指定位置注册具有给定 rccFileName 的资源,如果文件成功打开则返回 true;否则返回 false

另请参阅 unregisterResource()。

[static] bool QResource::registerResource(const uchar *rccData, const QString &mapRoot = QString())

在资源树中指定位置注册具有给定 rccData 的资源,如果文件成功打开则返回 true;否则返回 false

警告:在整个 QFile 生命周期中,必须保持引用的资源数据的有效性。

另请参阅 unregisterResource()。

void QResource::setFileName(const QString &file)

设置 QResource 以指向 file。如果 file 是绝对的,则直接打开;如果是相对的,则将在 QDir::searchPaths() 中尝试找到文件。

另请参阅 fileName() 和 absoluteFilePath()。

void QResource::setLocale(const QLocale &locale)

将QResource设置为仅加载特定区域设置的资源本地化。如果未找到特定区域的资源,则使用C语言区域。

另请参阅 locale() 和 setFileName

qint64 QResource::size() const

返回支持该资源的存储数据的尺寸。

如果资源被压缩,此函数返回压缩数据的尺寸。有关未压缩尺寸,请参阅 uncompressedSize

另请参阅 datauncompressedSizeisFile

QByteArray QResource::uncompressedData() const

返回资源数据,如果数据已存储压缩,则先进行解压缩。如果资源是一个目录或解压缩过程中发生错误,则返回一个null QByteArray

注意: 如果数据已被压缩,此函数将每次调用时解压缩一次。结果不在调用之间缓存。

另请参阅 uncompressedSizesizecompressionAlgorithmisFile

qint64 QResource::uncompressedSize() const

返回该资源中数据的尺寸。如果数据未被压缩,则此函数返回的值与 size 相同。如果它已被压缩,则此函数从存储流中提取原始未压缩数据的尺寸。

另请参阅 sizeuncompressedDataisFile

[静态] bool QResource::unregisterResource(const QString &rccFileName, const QString &mapRoot = QString())

取消在资源树中通过 mapRoot 指定位置的具有给定 rccFileName 的资源注册,如果资源成功卸载且没有对资源的引用,则返回 true;否则返回 false

另请参阅 registerResource

[静态] bool QResource::unregisterResource(const uchar *rccData, const QString &mapRoot = QString())

取消通过给定 rccData 在资源树中通过 mapRoot 指定位置的资源的注册,如果资源成功卸载且没有对资源的引用,则返回《code translate="no">true;否则返回 false

另请参阅 registerResource

© 2024 Qt公司有限公司。本文档包含的贡献文档版权属于其各自所有者。提供的文档受GNU自由文档许可(版本1.3)的条款约束,由自由软件基金会发布。Qt及其相关商标是Qt公司(芬兰及全球其他国家的商标)。所有其他商标均为各自所有者的财产。