PySide6.QtDBus.QDBusArgument

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

变体元素 ( QDBusVariant )

QDBusArgument.ArrayType

一个数组元素,通常由 QList 表示。注意:QByteArray 和关联映射不被视为数组,即使 D-Bus 协议将它们作为数组传输。

QDBusArgument.StructureType

由结构体表示的自定义类型,如QDateTime、QPoint等。

QDBusArgument.MapType

一个关联容器,如 QMap 或 QHash

QDBusArgument.MapEntryType

关联容器中的一个条目:键和值共同构成一个映射条目类型。

QDBusArgument.UnknownType

类型未知或我们已经到达列表的末尾。

另请参阅

currentType()

__init__()

构造一个空的 QDBusArgument 参数。

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

__init__(other)
Parameters:

其他QDBusArgument

构造一个QDBusArgument对象的other副本。

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

appendVariant(v)
Parameters:

v – 对象

asVariant()
Return type:

对象

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

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

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

另请参阅

atEnd()

atEnd()
Return type:

布尔

如果没有更多元素可以从这个QDBusArgument中提取,则返回true。此函数通常用于从beginMap()beginArray()返回的QDBusArgument对象中。

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)
Parameters:

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)
Parameters:

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)
Parameters:

警告

本节包含从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)
Parameters:
  • 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()
Return type:

字符串

currentType()
Return type:

ElementType

返回当前元素类型的分类。如果解码类型时发生错误或如果我们处于参数的末尾,此函数将返回UnknownType

此函数仅在解组参数时有意义。如果在组编时使用,它将始终返回UnknownType

endArray()

关闭D-Bus数组并允许在数组之后提取下一个元素。

另请参阅

beginArray()

endMap()

关闭D-Bus映射并允许在映射后提取下一个元素。

另请参阅

beginMap()

endMapEntry()

关闭D-Bus映射条目并允许提取映射上的下一个元素。

另请参阅

beginMapEntry()

endStructure()

关闭D-Bus结构并允许在结构之后提取下一个元素。

另请参阅

beginStructure()

__lshift__(arg)
Parameters:

arg – 布尔值

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

argQByteArray

Return type:

QDBusArgument

这是一个重载函数。

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

QStringList 和 QByteArray 是唯一两种由 QDBusArgument 直接支持的非原始类型,因为它们在 Qt 应用程序中广泛使用。

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

__lshift__(arg)
Parameters:

argQDBusObjectPath

Return type:

QDBusArgument

__lshift__(arg)
Parameters:

argQDBusSignature

Return type:

QDBusArgument

__lshift__(arg)
Parameters:

argQDBusUnixFileDescriptor

Return type:

QDBusArgument

__lshift__(arg)
Parameters:

argQDBusVariant

Return type:

QDBusArgument

这是一个重载函数。

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

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

__lshift__(date)
Parameters:

日期QDate

Return type:

QDBusArgument

__lshift__(dt)
Parameters:

dtQDateTime

Return type:

QDBusArgument

__lshift__(map)
Parameters:

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

Return type:

QDBusArgument

__lshift__(line)
Parameters:

线QLine

Return type:

QDBusArgument

__lshift__(line)
Parameters:

线QLineF

Return type:

QDBusArgument

__lshift__(list)
Parameters:

list – QVariant 的列表

Return type:

QDBusArgument

__lshift__(map)
Parameters:

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

Return type:

QDBusArgument

__lshift__(pt)
Parameters:

ptQPoint

Return type:

QDBusArgument

__lshift__(pt)
Parameters:

ptQPointF

Return type:

QDBusArgument

__lshift__(rect)
Parameters:

rectQRect

Return type:

QDBusArgument

__lshift__(rect)
Parameters:

矩形QRectF

Return type:

QDBusArgument

__lshift__(size)
Parameters:

大小QSize

Return type:

QDBusArgument

__lshift__(size)
Parameters:

大小QSizeF

Return type:

QDBusArgument

__lshift__(arg)
Parameters:

arg – 字符串

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 字符串列表

Return type:

QDBusArgument

这是一个重载函数。

arg给出的QStringList作为ARRAY of STRING附加到D-Bus流中。

QStringList 和 QByteArray 是唯一两种由 QDBusArgument 直接支持的非原始类型,因为它们在 Qt 应用程序中广泛使用。

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

__lshift__(time)
Parameters:

时间QTime

Return type:

QDBusArgument

__lshift__(arg)
Parameters:

arg – 浮点数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__lshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argQByteArray

Return type:

QDBusArgument

这是一个重载函数。

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

QStringList 和 QByteArray 是唯一两种由 QDBusArgument 直接支持的非原始类型,因为它们在 Qt 应用程序中广泛使用。

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

__rshift__(arg)
Parameters:

argQDBusObjectPath

Return type:

QDBusArgument

__rshift__(arg)
Parameters:

argQDBusSignature

Return type:

QDBusArgument

__rshift__(arg)
Parameters:

argQDBusUnixFileDescriptor

Return type:

QDBusArgument

__rshift__(arg)
Parameters:

argQDBusVariant

Return type:

QDBusArgument

这是一个重载函数。

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

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

如果变体包含的类型不被QDBusArgument直接支持,返回的QDBusVariant的值将包含另一个QDBusArgument。您有责任进一步将其解组为另一种类型。

__rshift__(date)
Parameters:

日期QDate

Return type:

QDBusArgument

__rshift__(dt)
Parameters:

dtQDateTime

Return type:

QDBusArgument

__rshift__(line)
Parameters:

线QLine

Return type:

QDBusArgument

__rshift__(line)
Parameters:

线QLineF

Return type:

QDBusArgument

__rshift__(pt)
Parameters:

ptQPoint

Return type:

QDBusArgument

__rshift__(pt)
Parameters:

ptQPointF

Return type:

QDBusArgument

__rshift__(rect)
Parameters:

rectQRect

Return type:

QDBusArgument

__rshift__(rect)
Parameters:

矩形QRectF

Return type:

QDBusArgument

__rshift__(size)
Parameters:

大小QSize

Return type:

QDBusArgument

__rshift__(size)
Parameters:

大小QSizeF

Return type:

QDBusArgument

__rshift__(arg)
Parameters:

arg – 字符串

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

arg – 字符串列表

Return type:

QDBusArgument

这是一个重载函数。

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

QStringList 和 QByteArray 是唯一两种由 QDBusArgument 直接支持的非原始类型,因为它们在 Qt 应用程序中广泛使用。

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

__rshift__(time)
Parameters:

时间QTime

Return type:

QDBusArgument

__rshift__(v)
Parameters:

v – 对象

Return type:

QDBusArgument

__rshift__(arg)
Parameters:

arg – 布尔值

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argdouble

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

arg – 整数

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argqlonglong

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argqulonglong

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argshort

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

arg – 字符串

Return type:

QDBusArgument

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

__rshift__(arg)
Parameters:

arguint

Return type:

QDBusArgument

这是一个重载函数。

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

__rshift__(arg)
Parameters:

argushort

Return type:

QDBusArgument

这是一个重载函数。

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

swap(other)
Parameters:

其他QDBusArgument

将此QDBusArgument实例与other交换。