- class QResource#
类
QResource
提供了一种直接从资源读取的接口。 更多…概述#
方法#
def
__init__()
def
children()
def
data()
def
fileName()
def
isDir()
def
isFile()
定义
isValid()
定义
locale()
定义
setLocale()
定义
size()
静态函数#
注意
此文档可能包含从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
函数。
构造一个指向
file
的QResource
。使用locale
加载资源数据的特定本地化版本。- absoluteFilePath()#
- 返回类型:
str
返回此
QResource
所表示的实际路径,如果资源是通过searchPaths()
找到的,则路径中将显示指示。另请参阅
- children()#
- 返回类型:
字符串列表
返回此目录中所有资源的列表,如果资源表示文件,则列表将为空。
另请参阅
返回此资源使用的压缩类型,如果有。如果没有压缩,此函数返回
NoCompression
。如果此函数返回
ZlibCompression
,您可以使用qUncompress()
函数解压缩数据。在 Qt 5.13 之前,这是唯一的可能的压缩算法。如果此函数返回
ZstdCompression
,您需要使用 Zstandard 库函数(<zstd.h>
头文件)。Qt 不提供包装器。见 Zstandard 手册。
- data()#
- 返回类型:
PyObject
返回一个指向表示该资源的数据段的只读缓冲区对象。如果资源被压缩,则返回的数据是压缩的,必须使用
qUncompress()
来访问数据。如果资源是目录,则返回 None。- fileName()#
- 返回类型:
str
返回代表此
- 返回类型:
bool
如果资源代表目录并且因此可能包含
另请参阅
- 返回类型:
bool
如果资源表示文件并且因此有数据支持,则返回
另请参阅
- 返回类型:
bool
如果资源确实存在于资源层次结构中,则返回
- 返回类型:
返回文件在打包为资源之前最后修改的日期和时间。
- 返回类型:
返回用于定位
另请参阅
- 参数:
rccFilename – str
resourceRoot – str
- 返回类型:
bool
在资源树中的指定位置以给定
另请参阅
- 参数:
rccData – str
resourceRoot – str
- 返回类型:
bool
- 注册资源数据
- 参数:
file – str
将一个
QResource
指向file
。如果file
是绝对路径,则直接打开;如果是相对路径,则在searchPaths()
中搜索文件。将一个
QResource
设置为只加载特定于locale
的资源本地化。如果找不到特定语言的资源,则使用 C 语言环境。另请参阅
- size()#
- 返回类型:
int
返回资源后存储数据的尺寸。
如果资源被压缩,此函数返回压缩数据的尺寸。请参见
uncompressedSize()
以获取未压缩尺寸。- uncompressedData()#
- 返回类型:
返回资源数据,如果数据是压缩的,先进行解压缩。如果资源是一个目录或者在解压缩过程中发生错误,则返回一个空的
QByteArray
。注意
如果数据被压缩,此函数将在每次调用时进行解压缩。结果不会在调用之间缓存。
- uncompressedSize()#
- 返回类型:
int
返回此资源中的数据大小。如果没有压缩,此函数返回与
size()
相同。如果是,则此函数从存储流中提取原始未压缩数据的大小。- 静态 unregisterResource(rccFilename[, resourceRoot=""])#
- 参数:
rccFilename – str
resourceRoot – str
- 返回类型:
bool
在由
mapRoot
指定的资源树位置取消注册具有给定rccFileName
的资源,并在资源成功卸载且不再有资源引用的情况下返回true
;否则返回false
。另请参阅
- 静态 unregisterResourceData(rccData[, resourceRoot=""])#
- 参数:
rccData – str
resourceRoot – str
- 返回类型:
bool