- class QDBusArgument#
该
QDBusArgument类用于序列化和反序列化 D-Bus 参数。 更多…概要#
方法#
def
__init__()def
appendVariant()def
asVariant()def
atEnd()def
beginArray()def
beginMap()定义
endArray()定义
endMap()定义
__lshift__()定义
__rshift__()定义
swap()
注意
本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告诉我们
详细描述#
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
该类用于向远程应用程序发送通过 D-Bus 的参数,并接收返回的参数。D-Bus 提供了一个可扩展的类型系统,基于一些原始类型及其关联。有关类型系统的更多信息,请参阅 Qt D-Bus 类型系统 页面。
QDBusArgument是 Qt D-Bus 类型系统中的核心类,提供了序列化和反序列化原始类型的功能。复合类型通过将一个或多个原始类型关联到数组、字典或结构体中创建。以下示例说明了如何使用 Qt D-Bus 类型系统 构建包含整数和字符串的结构体
class MyStructure(): count = int() name = QString() # ... Q_DECLARE_METATYPE(MyStructure) # Marshall the MyStructure data into a D-Bus argument QDBusArgument operator<<(QDBusArgument argument, MyStructure myStruct) argument.beginStructure() argument << myStruct.count << myStruct.name argument.endStructure() return argument # Retrieve the MyStructure data from the D-Bus argument QDBusArgument operator>>(QDBusArgument argument, MyStructure myStruct) argument.beginStructure() argument >> myStruct.count >> myStruct.name argument.endStructure() return argument
在使用
QDBusArgument之前,必须使用qDBusRegisterMetaType()将类型注册。因此,在您的程序中,您应该添加以下代码qDBusRegisterMetaType<MyStructure>()
一旦注册,类型就可以用于出站方法调用(通过
call()放置),从注册对象发出信号或在远程应用程序的入站调用中。需要注意的是,
operator<<和operator>>流操作函数在结构体的读写(打包和解包)过程中,必须始终产生相同数量的条目,否则调用和信号可能会开始默默地失败。以下示例演示了在可能包含无效数据的类背景下的这种错误用法。
//bad code // Wrongly marshall the MyTime data into a D-Bus argument QDBusArgument &operator<<(QDBusArgument &argument, const MyTime &mytime) { argument.beginStructure(); if (mytime.isValid) argument << true << mytime.hour << mytime.minute << mytime.second; else argument << false; argument.endStructure(); return argument; }
在这个示例中,
operator<<和operator>>函数可能会产生不同数量的读取/写入。这可能会使 Qt D-Bus 类型系统感到困惑,应该避免。另请参阅
QDBusAbstractInterfaceQt D-Bus 类型系统 使用适配器qdbus_cast()- class ElementType#
此枚举描述了参数所持有的元素的类型。
常量
描述
QDBusArgument.BasicType
一个基本元素,由 QVariant 理解。以下类型被认为是基本的:bool, byte, short, ushort, int, uint, qint64, quint64, double, QString, QByteArray,
QDBusObjectPath,QDBusSignatureQDBusArgument.VariantType
variant 元素(
QDBusVariant)QDBusArgument.ArrayType
数组元素,通常用 QList
表示。注意:QByteArray 和关联映射不被视为数组,即使 D-Bus 协议以这种方式传输它们。 QDBusArgument.StructureType
由结构体表示的自定义类型,例如 QDateTime, QPoint 等。
QDBusArgument.MapType
类似于 QMap
或 QHash 的关联容器。 QDBusArgument.MapEntryType
关联容器中的一个条目:键和值构成一个映射条目类型。
QDBusArgument.UnknownType
类型未知或已达到列表末尾。
另请参阅
- __init__(other)#
- 参数:
other –
QDBusArgument
构建
otherQDBusArgument对象的副本。因此,从这一点开始,两个对象都将包含相同的属性。QDBusArguments 被显式共享,因此,对任何一个副本的任何修改都将影响另一个副本。
- __init__()
构造一个空的
QDBusArgument参数。一个空的
QDBusArgument对象不允许执行读取或写入操作。- appendVariant(v)#
- 参数:
v – 对象
- asVariant()#
- 返回类型::
对象
以 QVariant 形式返回当前参数。基础类型将被解码并返回到 QVariant,但对于复杂类型,此函数将返回一个存放在 QVariant 中的
QDBusArgument对象。解码参数(例如,通过在其中调用 asVariant())是调用者的责任。例如,如果当前参数是 INT32,此函数将返回一个具有 QMetaType::Int 类型的 QVariant。对于一个 INT32 数组,它将返回一个包含
QDBusArgument的 QVariant。如果发生错误或没有更多参数要解码(即,我们到了参数列表的末尾),此函数将返回一个无效的 QVariant。
另请参阅
- atEnd()#
- 返回类型::
布尔值
如果没有更多元素要从此
QDBusArgument中提取,则返回true。此函数通常用于从QDBusArgument对象的beginMap()和beginArray()返回的对象中。- beginArray()#
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
递归到 D-Bus 数组中,以允许提取数组元素。
此函数通常在
operator>>流操作符中使用,如下例所示# Extract a MyArray array of MyElement elements QDBusArgument operator>>(QDBusArgument argument, MyArray myArray) argument.beginArray() myArray.clear() while not argument.atEnd(): element = MyElement() argument >> element myArray.append(element) argument.endArray() return argument
如果您想要反序列化的类型是 QList 或任何只接受一个模板参数的 Qt 容器类,您不需要为它声明一个
operator>>函数,因为 Qt D-Bus 提供了通用的模板,用于执行数据反序列化操作。同样的规则也适用于 STL 的序列容器,例如std::list、std::vector等。- beginArray(elementMetaType)
- 参数:
elementMetaType –
QMetaType
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
打开一个新的 D-Bus 数组,适用于附加元类型
id的元素。此函数通常用于
operator<<流操作符,如下面的示例所示# Append an array of MyElement types QDBusArgument operator<<(QDBusArgument argument, MyArray myArray) argument.beginArray(qMetaTypeId<MyElement>()) for element in myArray: argument << element argument.endArray() return argument
如果您想要序列化的类型是 QList 或任何只接受一个模板参数的 Qt 容器类,您不需要为它声明一个
operator<<函数,因为 Qt D-Bus 提供了通用模板来执行数据序列化操作。同样的规则也适用于 STL 的序列容器,例如std::list、std::vector等。- beginArray(elementMetaTypeId)
- 参数:
elementMetaTypeId – int
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
打开一个新的 D-Bus 数组,适用于附加元类型
id的元素。此函数通常用于
operator<<流操作符,如下面的示例所示# Append an array of MyElement types QDBusArgument operator<<(QDBusArgument argument, MyArray myArray) argument.beginArray(qMetaTypeId<MyElement>()) for element in myArray: argument << element argument.endArray() return argument
如果您想要序列化的类型是 QList 或任何只接受一个模板参数的 Qt 容器类,您不需要为它声明一个
operator<<函数,因为 Qt D-Bus 提供了通用模板来执行数据序列化操作。同样的规则也适用于 STL 的序列容器,例如std::list、std::vector等。- beginMap()#
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
递归进入 D-Bus 映射以允许提取映射的元素。
此函数通常在
operator>>流操作符中使用,如下例所示# Extract a MyDictionary map that associates integers to MyElement items QDBusArgument operator>>(QDBusArgument argument, MyDictionary myDict) argument.beginMap() myDict.clear() while not argument.atEnd(): key = int() value = MyElement() argument.beginMapEntry() argument >> key >> value argument.endMapEntry() myDict.insert(key, value) argument.endMap() return argument
如果您想要反序列化的类型是 QMap 或 QHash,您不需要为它声明一个
operator>>函数,因为 Qt D-Bus 提供了通用模板来执行数据反序列化操作。警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
打开一个新的D-Bus映射,适用于追加元素。映射是关联条目(键)与另一个条目(值)的容器,例如Qt的QMap或QHash。映射的键和值元类型的ID必须分别通过
keyMetaType和valueMetaType传递。此函数通常用于
operator<<流操作符,如下面的示例所示# Append a dictionary that associates ints to MyValue types QDBusArgument operator<<(QDBusArgument argument, MyDictionary myDict) argument.beginMap(QMetaType.fromType<int>(), QMetaType.fromType<MyValue>()) MyDictionary.const_iterator i for i in myDict: argument.beginMapEntry() argument << i.key() << i.value() argument.endMapEntry() argument.endMap() return argument
通常您不需要为QHash或std::map等关联容器提供
operator<<或operator>>函数,因为Qt D-Bus提供通用模板来执行数据序列化的工作。- beginMap(keyMetaTypeId, valueMetaTypeId)
- 参数:
keyMetaTypeId – int
valueMetaTypeId – int
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
打开一个新的D-Bus映射,适用于追加元素。映射是关联条目(键)与另一个条目(值)的容器,例如Qt的QMap或QHash。映射的键和值元类型的ID必须分别通过
keyMetaType和valueMetaType传递。此函数通常用于
operator<<流操作符,如下面的示例所示# Append a dictionary that associates ints to MyValue types QDBusArgument operator<<(QDBusArgument argument, MyDictionary myDict) argument.beginMap(QMetaType.fromType<int>(), QMetaType.fromType<MyValue>()) MyDictionary.const_iterator i for i in myDict: argument.beginMapEntry() argument << i.key() << i.value() argument.endMapEntry() argument.endMap() return argument
通常您不需要为QHash或std::map等关联容器提供
operator<<或operator>>函数,因为Qt D-Bus提供通用模板来执行数据序列化的工作。- beginMapEntry()#
递归进入D-Bus映射条目,以便提取键和值对。
有关如何使用此函数的示例,请参阅
beginMap()。另请参阅
- beginStructure()#
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
打开一个D-Bus结构,适用于提取元素。
此函数通常在
operator>>流操作符中使用,如下例所示QDBusArgument operator>>(QDBusArgument argument, MyStructure myStruct) argument.beginStructure() argument >> myStruct.member1 >> myStruct.member2 >> myStruct.member3 argument.endStructure() return argument
- currentSignature()#
- 返回类型::
str
- currentType()#
- 返回类型::
返回当前元素类型的分类。如果编码类型出现错误或达到参数的结尾,此函数返回
UnknownType.此函数仅用于取消序列化。如果用于序列化,它将始终返回
UnknownType.- endArray()#
关闭 D-Bus 数组,并允许从数组中提取下一个元素。
另请参阅
- endMap()#
关闭 D-Bus 地图并允许提取地图之后的下一个元素。
另请参阅
- endMapEntry()#
关闭 D-Bus 地图条目并允许在地图中提取下一个元素。
另请参阅
- endStructure()#
关闭 D-Bus 结构,并允许从结构中提取下一个元素。
另请参阅
- __lshift__(arg)#
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
UINT16的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
UINT32的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
将类型为
BYTE的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
INT16的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
UINT64的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
INT64的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
将类型为
INT32的原始值arg添加到 D-Bus 流。- __lshift__(arg)
- 参数:
arg – float
- 返回类型::
这是一个重载的函数。
将类型为
DOUBLE(双精度浮点数) 的原始值arg添加到 D-Bus 流。- __lshift__(time)
- 参数:
time –
QTime- 返回类型::
- __lshift__(arg)
- 参数:
arg – 列表字符串
- 返回类型::
这是一个重载的函数。
将由
arg提供的 QStringList 作为ARRAY of STRING添加到 D-Bus 流。QStringList 和 QByteArray 是唯一两个由
QDBusArgument直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。其他数组通过 Qt D-Bus 中的复合类型得到支持。
- __lshift__(arg)
- 参数:
arg - 字符串
- 返回类型::
这是一个重载的函数。
将
arg类型的原始值(Unicode 字符串)附加到 D-Bus 流中。- __lshift__(size)
- 参数:
size -
QSizeF- 返回类型::
- __lshift__(size)
- 参数:
size -
QSize- 返回类型::
- __lshift__(rect)
- 参数:
rect -
QRectF- 返回类型::
- __lshift__(rect)
- 参数:
rect -
QRect- 返回类型::
- __lshift__(pt)
- 参数:
pt -
QPoint- 返回类型::
- __lshift__(pt)
- 参数:
pt -
QPointF- 返回类型::
- __lshift__(arg)
- 参数:
arg - 布尔值
- 返回类型::
这是一个重载的函数。
将类型为
BOOLEAN的原始值arg附加到 D-Bus 流中。- __lshift__(arg)
- 参数:
arg -
QByteArray- 返回类型::
这是一个重载的函数。
将
arg指定的 QByteArray 作为ARRAY of BYTE附加到 D-Bus 流中。QStringList 和 QByteArray 是唯一两个由
QDBusArgument直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。其他数组通过 Qt D-Bus 中的复合类型得到支持。
- __lshift__(arg)
- 参数:
arg -
QDBusObjectPath- 返回类型::
- __lshift__(arg)
- 参数:
arg -
QDBusSignature- 返回类型::
- __lshift__(arg)
- 参数:
arg -
QDBusUnixFileDescriptor- 返回类型::
- __lshift__(arg)
- 参数:
arg -
QDBusVariant- 返回类型::
这是一个重载的函数。
将类型为
VARIANT的原始值arg附加到 D-Bus 流中。D-Bus 变体类型可以包含任何类型,包括其他变体。它类似于 Qt QVariant 类型。
- __lshift__(dt)
- 参数:
dt -
QDateTime- 返回类型::
- __lshift__(map)
- 参数:
map – 键为 QString 类型,值为 QVariant 类型的字典。
- 返回类型::
- __lshift__(line)
- 参数:
line –
QLine- 返回类型::
- __lshift__(line)
- 参数:
line –
QLineF- 返回类型::
- __lshift__(list)
- 参数:
list – QVariant 类型的 .list 列表
- 返回类型::
- __lshift__(map)
- 参数:
map – 键为 QString 类型,值为 QVariant 类型的字典。
- 返回类型::
- __lshift__(date)
- 参数:
date –
QDate- 返回类型::
- __rshift__(arg)#
- 参数:
arg - 字符串
- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
STRING(Unicode 字符串) 的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg – 列表字符串
- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取字符串数组,并将其作为 QStringList 返回。
QStringList 和 QByteArray 是唯一两个由
QDBusArgument直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。其他数组通过 Qt D-Bus 中的复合类型得到支持。
- __rshift__(time)
- 参数:
time –
QTime- 返回类型::
- __rshift__(v)
- 参数:
v – 对象
- 返回类型::
- __rshift__(arg)
- 参数:
arg - 布尔值
- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
BOOLEAN的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg –
double- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
DOUBLE(双精度浮点数) 的一个 D-Bus 基本参数。- __rshift__(line)
- 参数:
line –
QLine- 返回类型::
- __rshift__(arg)
- 参数:
arg – int
- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
INT32的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg –
qlonglong- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
INT64的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg –
qulonglong- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
UINT64的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg –
short- 返回类型::
这是一个重载的函数。
从 D-Bus 流中提取类型为
INT16的一个 D-Bus 基本参数。- __rshift__(arg)
- 参数:
arg - 字符串
- 返回类型::
从 D-Bus 流中提取类型为
BYTE的一个 D-Bus 基本参数,并将其放入arg中。- __rshift__(arg)
- 参数:
arg –
uint- 返回类型::
这是一个重载的函数。
从D-Bus流中提取一个类型为
UINT32的D-Bus原始参数。- __rshift__(arg)
- 参数:
arg –
ushort- 返回类型::
这是一个重载的函数。
从D-Bus流中提取一个类型为
UINT16的D-Bus原始参数。- __rshift__(size)
- 参数:
size -
QSizeF- 返回类型::
- __rshift__(size)
- 参数:
size -
QSize- 返回类型::
- __rshift__(rect)
- 参数:
rect -
QRectF- 返回类型::
- __rshift__(rect)
- 参数:
rect -
QRect- 返回类型::
- __rshift__(pt)
- 参数:
pt -
QPointF- 返回类型::
- __rshift__(pt)
- 参数:
pt -
QPoint- 返回类型::
- __rshift__(line)
- 参数:
line –
QLineF- 返回类型::
- __rshift__(dt)
- 参数:
dt -
QDateTime- 返回类型::
- __rshift__(date)
- 参数:
date –
QDate- 返回类型::
- __rshift__(arg)
- 参数:
arg -
QDBusVariant- 返回类型::
这是一个重载的函数。
从D-Bus流中提取一个类型为
VARIANT的D-Bus原始参数。D-Bus 变体类型可以包含任何类型,包括其他变体。它类似于 Qt QVariant 类型。
如果该变体包含一个不是由
QDBusArgument直接支持的类型,则返回的QDBusVariant的值将包含另一个QDBusArgument。您负责将其进一步反序列化为另一种类型。- __rshift__(arg)
- 参数:
arg -
QDBusUnixFileDescriptor- 返回类型::
- __rshift__(arg)
- 参数:
arg -
QDBusSignature- 返回类型::
- __rshift__(arg)
- 参数:
arg -
QDBusObjectPath- 返回类型::
- __rshift__(arg)
- 参数:
arg -
QByteArray- 返回类型::
这是一个重载的函数。
从D-Bus流中提取一个字节数组并将其作为 QByteArray 返回。
QStringList 和 QByteArray 是唯一两个由
QDBusArgument直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。其他数组通过 Qt D-Bus 中的复合类型得到支持。
- swap(other)#
- 参数:
other –
QDBusArgument
与
other交换此QDBusArgument实例。