PyQt5.QtCore模块中的数据序列化和反序列化方法
发布时间:2023-12-27 12:57:38
在PyQt5.QtCore模块中,提供了一些数据序列化和反序列化的方法,可以方便地将数据转化为字节流,并从字节流中恢复数据。
其中,常用的数据序列化和反序列化方法包括:
- QVariant:将任意类型的数据序列化为QVariant对象,可以方便地在不同的平台和进程之间传递数据。
- QDataStream:将数据以二进制流的形式进行序列化和反序列化。
- QJsonDocument:将数据以JSON格式进行序列化和反序列化。
- QSettings:将数据持久化存储,可以将数据保存在ini文件、注册表或macOS的plist文件中。
下面是对这些方法的使用例子。
1. QVariant的使用
QVariant用于在不同的平台和进程之间传递数据,可以将各种类型的数据序列化为QVariant对象,并从QVariant对象中恢复数据。
from PyQt5.QtCore import QVariant # 序列化 data = 123 variant = QVariant(data) byte_array = variant.toByteArray() # 反序列化 variant = QVariant() variant.fromByteArray(byte_array) data = variant.toInt()[0] print(data) # 输出:123
2. QDataStream的使用
QDataStream类提供了一种方便的方式来序列化和反序列化数据,可以将数据保存到二进制流中,并从二进制流中恢复数据。
from PyQt5.QtCore import QDataStream, QFile
# 序列化
file = QFile("data.bin")
file.open(QFile.WriteOnly)
stream = QDataStream(file)
data = 123
stream.writeInt(data)
file.close()
# 反序列化
file = QFile("data.bin")
file.open(QFile.ReadOnly)
stream = QDataStream(file)
data = stream.readInt()
file.close()
print(data) # 输出:123
3. QJsonDocument的使用
QJsonDocument类提供了一种方便的方式来将数据以JSON格式进行序列化和反序列化。
from PyQt5.QtCore import QJsonDocument, QJsonObject
# 序列化
data = {"name": "John", "age": 25}
json_object = QJsonObject()
json_object["name"] = data["name"]
json_object["age"] = data["age"]
json_document = QJsonDocument(json_object)
json_data = json_document.toJson()
# 反序列化
json_document = QJsonDocument.fromJson(json_data)
json_object = json_document.object()
data = {"name": json_object["name"], "age": json_object["age"]}
print(data) # 输出:{'name': 'John', 'age': 25}
4. QSettings的使用
QSettings类提供了一种方便的方式来将数据持久化存储,可以将数据保存在ini文件、注册表或macOS的plist文件中。
from PyQt5.QtCore import QSettings
# 写入数据
settings = QSettings("config.ini", QSettings.IniFormat)
settings.setValue("name", "John")
settings.setValue("age", 25)
# 读取数据
settings = QSettings("config.ini", QSettings.IniFormat)
name = settings.value("name")
age = settings.value("age")
print(name, age) # 输出:John 25
以上就是PyQt5.QtCore模块中数据序列化和反序列化方法的使用例子。通过这些方法,可以方便地将各种类型的数据序列化为字节流,并从字节流中恢复数据,方便实现数据的传递和持久化存储。
