class QDBusArgument#

QDBusArgument 类用于序列化和反序列化 D-Bus 参数。 更多

概要#

方法#

注意

本文档可能包含从 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 类型系统感到困惑,应该避免。

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

类型未知或已达到列表末尾。

另请参阅

currentType()

__init__(other)#
参数:

otherQDBusArgument

构建 other QDBusArgument 对象的副本。

因此,从这一点开始,两个对象都将包含相同的属性。QDBusArguments 被显式共享,因此,对任何一个副本的任何修改都将影响另一个副本。

__init__()

构造一个空的 QDBusArgument 参数。

一个空的 QDBusArgument 对象不允许执行读取或写入操作。

appendVariant(v)#
参数:

v – 对象

asVariant()#
返回类型::

对象

以 QVariant 形式返回当前参数。基础类型将被解码并返回到 QVariant,但对于复杂类型,此函数将返回一个存放在 QVariant 中的 QDBusArgument 对象。解码参数(例如,通过在其中调用 asVariant())是调用者的责任。

例如,如果当前参数是 INT32,此函数将返回一个具有 QMetaType::Int 类型的 QVariant。对于一个 INT32 数组,它将返回一个包含 QDBusArgument 的 QVariant。

如果发生错误或没有更多参数要解码(即,我们到了参数列表的末尾),此函数将返回一个无效的 QVariant。

另请参阅

atEnd()

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::liststd::vector 等。

beginArray(elementMetaType)
参数:

elementMetaTypeQMetaType

警告

本节包含从 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::liststd::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::liststd::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 提供了通用模板来执行数据反序列化操作。

beginMap(keyMetaType, valueMetaType)
参数:

警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

打开一个新的D-Bus映射,适用于追加元素。映射是关联条目(键)与另一个条目(值)的容器,例如Qt的QMap或QHash。映射的键和值元类型的ID必须分别通过keyMetaTypevalueMetaType传递。

此函数通常用于 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必须分别通过keyMetaTypevalueMetaType传递。

此函数通常用于 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()

另请参阅

endMapEntry() 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()#
返回类型::

ElementType

返回当前元素类型的分类。如果编码类型出现错误或达到参数的结尾,此函数返回UnknownType .

此函数仅用于取消序列化。如果用于序列化,它将始终返回UnknownType .

endArray()#

关闭 D-Bus 数组,并允许从数组中提取下一个元素。

另请参阅

beginArray()

endMap()#

关闭 D-Bus 地图并允许提取地图之后的下一个元素。

另请参阅

beginMap()

endMapEntry()#

关闭 D-Bus 地图条目并允许在地图中提取下一个元素。

另请参阅

beginMapEntry()

endStructure()#

关闭 D-Bus 结构,并允许从结构中提取下一个元素。

另请参阅

beginStructure()

__lshift__(arg)#
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 UINT16 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 UINT32 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

将类型为 BYTE 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 INT16 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 UINT64 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 INT64 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 INT32 的原始值 arg 添加到 D-Bus 流。

__lshift__(arg)
参数:

arg – float

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 DOUBLE (双精度浮点数) 的原始值 arg 添加到 D-Bus 流。

__lshift__(time)
参数:

timeQTime

返回类型::

QDBusArgument

__lshift__(arg)
参数:

arg – 列表字符串

返回类型::

QDBusArgument

这是一个重载的函数。

将由 arg 提供的 QStringList 作为 ARRAY of STRING 添加到 D-Bus 流。

QStringList 和 QByteArray 是唯一两个由 QDBusArgument 直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。

其他数组通过 Qt D-Bus 中的复合类型得到支持。

__lshift__(arg)
参数:

arg - 字符串

返回类型::

QDBusArgument

这是一个重载的函数。

arg 类型的原始值(Unicode 字符串)附加到 D-Bus 流中。

__lshift__(size)
参数:

size - QSizeF

返回类型::

QDBusArgument

__lshift__(size)
参数:

size - QSize

返回类型::

QDBusArgument

__lshift__(rect)
参数:

rect - QRectF

返回类型::

QDBusArgument

__lshift__(rect)
参数:

rect - QRect

返回类型::

QDBusArgument

__lshift__(pt)
参数:

pt - QPoint

返回类型::

QDBusArgument

__lshift__(pt)
参数:

pt - QPointF

返回类型::

QDBusArgument

__lshift__(arg)
参数:

arg - 布尔值

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 BOOLEAN 的原始值 arg 附加到 D-Bus 流中。

__lshift__(arg)
参数:

arg - QByteArray

返回类型::

QDBusArgument

这是一个重载的函数。

arg 指定的 QByteArray 作为 ARRAY of BYTE 附加到 D-Bus 流中。

QStringList 和 QByteArray 是唯一两个由 QDBusArgument 直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。

其他数组通过 Qt D-Bus 中的复合类型得到支持。

__lshift__(arg)
参数:

arg - QDBusObjectPath

返回类型::

QDBusArgument

__lshift__(arg)
参数:

arg - QDBusSignature

返回类型::

QDBusArgument

__lshift__(arg)
参数:

arg - QDBusUnixFileDescriptor

返回类型::

QDBusArgument

__lshift__(arg)
参数:

arg - QDBusVariant

返回类型::

QDBusArgument

这是一个重载的函数。

将类型为 VARIANT 的原始值 arg 附加到 D-Bus 流中。

D-Bus 变体类型可以包含任何类型,包括其他变体。它类似于 Qt QVariant 类型。

__lshift__(dt)
参数:

dt - QDateTime

返回类型::

QDBusArgument

__lshift__(map)
参数:

map – 键为 QString 类型,值为 QVariant 类型的字典。

返回类型::

QDBusArgument

__lshift__(line)
参数:

lineQLine

返回类型::

QDBusArgument

__lshift__(line)
参数:

lineQLineF

返回类型::

QDBusArgument

__lshift__(list)
参数:

list – QVariant 类型的 .list 列表

返回类型::

QDBusArgument

__lshift__(map)
参数:

map – 键为 QString 类型,值为 QVariant 类型的字典。

返回类型::

QDBusArgument

__lshift__(date)
参数:

dateQDate

返回类型::

QDBusArgument

__rshift__(arg)#
参数:

arg - 字符串

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 STRING (Unicode 字符串) 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

arg – 列表字符串

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取字符串数组,并将其作为 QStringList 返回。

QStringList 和 QByteArray 是唯一两个由 QDBusArgument 直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。

其他数组通过 Qt D-Bus 中的复合类型得到支持。

__rshift__(time)
参数:

timeQTime

返回类型::

QDBusArgument

__rshift__(v)
参数:

v – 对象

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg - 布尔值

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 BOOLEAN 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

argdouble

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 DOUBLE (双精度浮点数) 的一个 D-Bus 基本参数。

__rshift__(line)
参数:

lineQLine

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg – int

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 INT32 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

argqlonglong

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 INT64 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

argqulonglong

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 UINT64 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

argshort

返回类型::

QDBusArgument

这是一个重载的函数。

从 D-Bus 流中提取类型为 INT16 的一个 D-Bus 基本参数。

__rshift__(arg)
参数:

arg - 字符串

返回类型::

QDBusArgument

从 D-Bus 流中提取类型为 BYTE 的一个 D-Bus 基本参数,并将其放入 arg 中。

__rshift__(arg)
参数:

arguint

返回类型::

QDBusArgument

这是一个重载的函数。

从D-Bus流中提取一个类型为 UINT32 的D-Bus原始参数。

__rshift__(arg)
参数:

argushort

返回类型::

QDBusArgument

这是一个重载的函数。

从D-Bus流中提取一个类型为 UINT16 的D-Bus原始参数。

__rshift__(size)
参数:

size - QSizeF

返回类型::

QDBusArgument

__rshift__(size)
参数:

size - QSize

返回类型::

QDBusArgument

__rshift__(rect)
参数:

rect - QRectF

返回类型::

QDBusArgument

__rshift__(rect)
参数:

rect - QRect

返回类型::

QDBusArgument

__rshift__(pt)
参数:

pt - QPointF

返回类型::

QDBusArgument

__rshift__(pt)
参数:

pt - QPoint

返回类型::

QDBusArgument

__rshift__(line)
参数:

lineQLineF

返回类型::

QDBusArgument

__rshift__(dt)
参数:

dt - QDateTime

返回类型::

QDBusArgument

__rshift__(date)
参数:

dateQDate

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg - QDBusVariant

返回类型::

QDBusArgument

这是一个重载的函数。

从D-Bus流中提取一个类型为 VARIANT 的D-Bus原始参数。

D-Bus 变体类型可以包含任何类型,包括其他变体。它类似于 Qt QVariant 类型。

如果该变体包含一个不是由 QDBusArgument 直接支持的类型,则返回的 QDBusVariant 的值将包含另一个 QDBusArgument 。您负责将其进一步反序列化为另一种类型。

__rshift__(arg)
参数:

arg - QDBusUnixFileDescriptor

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg - QDBusSignature

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg - QDBusObjectPath

返回类型::

QDBusArgument

__rshift__(arg)
参数:

arg - QByteArray

返回类型::

QDBusArgument

这是一个重载的函数。

从D-Bus流中提取一个字节数组并将其作为 QByteArray 返回。

QStringList 和 QByteArray 是唯一两个由 QDBusArgument 直接支持的非常量类型,这是因为它们在 Qt 应用程序中得到广泛使用。

其他数组通过 Qt D-Bus 中的复合类型得到支持。

swap(other)#
参数:

otherQDBusArgument

other 交换此 QDBusArgument 实例。