You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt5中使用QDataStream读取QVector?

解决PyQt5中QtDataStream读取QVector的问题

PyQt5确实没有提供QVector类的绑定,因为Python原生列表已经可以完全替代它的功能。要读取QtDataStream中的QVector数据,你可以根据存储的元素类型手动读取——QVector在序列化时的格式是先存储元素个数(quint32类型),再依次存储每个元素。

针对基础类型的QVector(如QVector、QVector等)

直接读取元素个数后循环读取每个元素,存入Python列表:

from PyQt5 import QtCore

path = "your_file_path.dat"
infile = QtCore.QFile(path)
if not infile.open(QtCore.QIODevice.ReadOnly):
    raise IOError(infile.errorString())
stream = QtCore.QDataStream(infile)

# 读取QVector的元素个数
vec_size = QtCore.quint32()
stream >> vec_size

# 循环读取每个元素,以int类型为例
result_list = []
for _ in range(vec_size):
    elem = int()
    stream >> elem
    result_list.append(elem)

# 如果是QString类型,替换成如下读取方式
# for _ in range(vec_size):
#     elem = QtCore.QString()
#     stream >> elem
#     result_list.append(str(elem))

针对自定义类型的QVector

如果QVector存储的是自定义C类型,需要先确保该类型已经通过qRegisterMetaType注册,并且在C端实现了QDataStream的operator<<和operator>>重载。之后在Python中同样按“读大小+循环读元素”的方式处理:

# 假设自定义类型为MyCustomType,已在PyQt中绑定
from PyQt5 import QtCore
from your_module import MyCustomType

infile = QtCore.QFile(path)
if not infile.open(QtCore.QIODevice.ReadOnly):
    raise IOError(infile.errorString())
stream = QtCore.QDataStream(infile)

vec_size = QtCore.quint32()
stream >> vec_size

result_list = []
for _ in range(vec_size):
    elem = MyCustomType()
    stream >> elem
    result_list.append(elem)

补充说明

Qt的Python绑定中,大部分Qt容器类都会映射到Python原生类型(比如QList对应Python列表),QVector因为和QList功能重叠,且Python列表更易用,所以没有单独提供绑定。只要遵循QtDataStream的序列化格式,就能轻松将QVector的数据读取到Python列表中。

内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:07:18