- 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 类型系统感到困惑,应该避免。另请参阅
QDBusAbstractInterface
Qt D-Bus 类型系统 使用适配器qdbus_cast()
- class ElementType#
此枚举描述了参数所持有的元素的类型。
常量
描述
QDBusArgument.BasicType
一个基本元素,由 QVariant 理解。以下类型被认为是基本的:bool, byte, short, ushort, int, uint, qint64, quint64, double, QString, QByteArray,
QDBusObjectPath
,QDBusSignature
QDBusArgument.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
构建
other
QDBusArgument
对象的副本。因此,从这一点开始,两个对象都将包含相同的属性。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
实例。