class QResource#

QResource 提供了一种直接从资源读取的接口。 更多

概述#

方法#

静态函数#

注意

此文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对片段翻译的贡献。如果您在翻译中遇到问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建一个票证来告诉我们

详细描述#

QResource 是一个表示与单个资源实体相关的一组数据(以及可能的后代)的对象。 QResource 提供了对其实际字节的直接访问。这样直接访问允许在不进行缓冲区复制或间接引用的情况下读取数据。当与资源实体交互时,间接引用通常是很有用的,它可以像文件一样,通过使用 QFile 来实现。 QResource 后面的数据和子项通常会被编译成一个应用程序/库中,但也可以在运行时加载资源。在运行时加载资源时,资源文件将作为一个大数据集被加载,然后通过资源树的引用分块提供。

一个 QResource 可以通过绝对路径加载,或者作为一个以 / 字符为根的文件系统处理,或者使用以 : 字符为根的资源符号。也可以打开一个相对资源,它将在 searchPaths() 返回的路径列表中找到。

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

动态资源加载#

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

这通常在加载可能根据设置而更改的一组应用程序图标时很有用,或者用户可以编辑它们并提供修改后的补丁。资源将立即加载到内存中,要么是单个文件读取操作的结果,要么是内存映射文件。

这种方法可以显著提高性能,因为只有一个文件会被加载,并且通过 setFileName() 请求的路径提供数据。

unregisterResource() 函数删除一个特定文件的引用。如果当前有 QResource 对象引用与未注册文件相关的资源,它们将继续有效,但资源文件本身将从资源根中删除,因此无法再创建指向此资源数据的 QResource。当最后一个指向它的 QResource 被销毁时,资源本身将从中退出内存映射。

损坏和安全#

QResource 类对传入的文件进行一些检查,以判断该文件是否被当前版本的 Qt 支持。这些测试只是检查文件头部是否请求未编译进来的特性(例如 Zstandard 解压缩),或者该文件不是 Qt 的未来版本。它们并不确认整个文件的 validity。

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

class Compression#

此枚举由 compressionAlgorithm() 使用,用以指示 RCC 工具用来压缩有效载荷的算法。

常量

描述

QResource.NoCompression

内容未压缩

QResource.ZlibCompression

内容使用 zlib 压缩,可以使用 qUncompress() 函数解压缩。

QResource.ZstdCompression

内容使用 zstd 压缩。要解压缩,请使用 zstd 库中的 ZSTD_decompress 函数。

另请参阅

compressionAlgorithm()

__init__([file=""[, locale=QLocale()]])#
参数:

构造一个指向 fileQResource。使用 locale 加载资源数据的特定本地化版本。

absoluteFilePath()#
返回类型:

str

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

另请参阅

fileName()

children()#
返回类型:

字符串列表

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

另请参阅

isDir()

compressionAlgorithm()#
返回类型:

压缩

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

如果此函数返回 ZlibCompression,您可以使用 qUncompress() 函数解压缩数据。在 Qt 5.13 之前,这是唯一的可能的压缩算法。

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

Zstandard 手册

另请参阅

data() isFile()

data()#
返回类型:

PyObject

返回一个指向表示该资源的数据段的只读缓冲区对象。如果资源被压缩,则返回的数据是压缩的,必须使用 qUncompress() 来访问数据。如果资源是目录,则返回 None。

fileName()#
返回类型:

str

返回代表此

另请参阅

返回类型:

bool

如果资源代表目录并且因此可能包含

返回类型:

bool

如果资源表示文件并且因此有数据支持,则返回

另请参阅

isDir()

返回类型:

bool

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

返回类型:

QDateTime

返回文件在打包为资源之前最后修改的日期和时间。

返回类型:

QLocale

返回用于定位

另请参阅

setLocale()

参数:
  • rccFilename – str

  • resourceRoot – str

返回类型:

bool

在资源树中的指定位置以给定

另请参阅

unregisterResource()

参数:
  • rccData – str

  • resourceRoot – str

返回类型:

bool

注册资源数据
参数:

file – str

将一个 QResource 指向 file。如果 file 是绝对路径,则直接打开;如果是相对路径,则在 searchPaths() 中搜索文件。

setLocale(locale)#
参数:

localeQLocale

将一个 QResource 设置为只加载特定于 locale 的资源本地化。如果找不到特定语言的资源,则使用 C 语言环境。

另请参阅

locale() setFileName()

size()#
返回类型:

int

返回资源后存储数据的尺寸。

如果资源被压缩,此函数返回压缩数据的尺寸。请参见 uncompressedSize() 以获取未压缩尺寸。

uncompressedData()#
返回类型:

QByteArray

返回资源数据,如果数据是压缩的,先进行解压缩。如果资源是一个目录或者在解压缩过程中发生错误,则返回一个空的 QByteArray

注意

如果数据被压缩,此函数将在每次调用时进行解压缩。结果不会在调用之间缓存。

uncompressedSize()#
返回类型:

int

返回此资源中的数据大小。如果没有压缩,此函数返回与 size() 相同。如果是,则此函数从存储流中提取原始未压缩数据的大小。

静态 unregisterResource(rccFilename[, resourceRoot=""])#
参数:
  • rccFilename – str

  • resourceRoot – str

返回类型:

bool

在由 mapRoot 指定的资源树位置取消注册具有给定 rccFileName 的资源,并在资源成功卸载且不再有资源引用的情况下返回 true;否则返回 false

另请参阅

registerResource()

静态 unregisterResourceData(rccData[, resourceRoot=""])#
参数:
  • rccData – str

  • resourceRoot – str

返回类型:

bool