class QDBusConnection#

QDBusConnection 类代表了一个到 D-Bus 总线守护进程的连接。 更多

摘要#

方法#

静态函数#

注意

此文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单的方式告诉我们。

详细描述#

此类是D-Bus会话的起点。使用它,您可以访问远程对象、接口;将远程信号连接到您对象的槽位;注册对象等。

使用connectToBus()函数创建D-Bus连接,该函数打开到服务器守护进程的连接并完成初始握手,将连接关联到一个名称。再次尝试使用相同名称进行连接将返回相同的连接。

然后使用disconnectFromBus()函数断开连接。

一旦断开连接,调用connectToBus()不会重新建立连接,您必须创建一个新的QDBusConnection实例。

为了方便使用最常见的两种连接类型,sessionBus()systemBus()函数将分别返回会话服务器守护进程和系统服务器守护进程的已打开连接。这些连接在首次使用时打开,并在QCoreApplication析构函数运行时关闭。

D-Bus还支持端到端连接,不需要总线服务器守护进程。使用此设施,两个应用程序可以相互通信并交换消息。这可以通过将地址传递给由另一个使用QDBusServer的D-Bus应用程序打开的connectToBus()函数来实现。

class BusType#

指定总线连接的类型。有效的总线类型如下

常量

描述

QDBusConnection.SessionBus

会话总线,与运行中的桌面会话关联

QDBusConnection.SystemBus

系统总线,用于与系统范围进程通信

QDBusConnection.ActivationBus

激活总线,是启动服务的总线的“别名”

在会话总线上,可以找到与同一用户共享相同桌面会话的其他应用程序(因此得名)。然而,在系统总线上,通常可以找到为整个系统共享的进程。

class RegisterOption#

(继承自enum.Flag) 指定将对象注册到连接的选项。可能的值如下

常量

描述

QDBusConnection.ExportAdaptors

导出在此对象中找到的适配器的内容

QDBusConnection.ExportScriptableSlots

导出此对象的脚本槽

QDBusConnection.ExportScriptableSignals

导出此对象的脚信信号

QDBusConnection.ExportScriptableProperties

导出此对象的脚本属性

QDBusConnection.ExportScriptableInvokables

导出此对象的脚本可调用项

QDBusConnection.ExportScriptableContents

ExportScriptableSlots | ExportScriptableSignals | ExportScriptableProperties的简称

QDBusConnection.ExportNonScriptableSlots

导出此对象的非脚本槽

QDBusConnection.ExportNonScriptableSignals

导出此对象的非脚本信号

QDBusConnection.ExportNonScriptableProperties

导出此对象的非脚本属性

QDBusConnection.ExportNonScriptableInvokables

导出此对象的非脚本可调用项

QDBusConnection.ExportNonScriptableContents

ExportNonScriptableSlots | ExportNonScriptableSignals | ExportNonScriptableProperties的简称

QDBusConnection.ExportAllSlots

导出此对象的所有槽

QDBusConnection.ExportAllSignals

导出此对象的所有信号

QDBusConnection.ExportAllProperties

导出此对象的所有属性

QDBusConnection.ExportAllInvokables

导出此对象的所有可调用项

QDBusConnection.ExportAllContents

导出此对象的所有内容

QDBusConnection.ExportChildObjects

导出此对象的所有子对象

class UnregisterMode#

注销对象路径的模式

常量

描述

QDBusConnection.UnregisterNode

仅注销此节点:不注销子对象

QDBusConnection.UnregisterTree

注销此节点及其所有子树

但是,如果此对象使用ExportChildObjects 选项注册,则UnregisterNode也会注销子对象。

class VirtualObjectRegisterOption#
class ConnectionCapability#

(继承自enum.Flag) 此枚举描述了D-Bus连接的可用功能。

常量

描述

QDBusConnection.UnixFileDescriptorPassing

启用将Unix文件描述符传递给其他进程(见QDBusUnixFileDescriptor

有关内容,请参阅

connectionCapabilities()

__init__(name)#
参数:

name – str

创建一个QDBusConnection对象,并将其连接到具有名称name的连接。

这不会打开连接。您必须调用 connectToBus() 来打开它。

__init__(other)
参数:

otherQDBusConnection

创建一个 other 连接的副本。

asyncCall(message[, timeout=-1])#
参数:
返回类型:

QDBusPendingCall

通过此连接发送消息并立即返回。此函数仅适用于方法调用。它返回一个类型为 QDBusPendingCall 的对象,可用于跟踪回复状态。

如果在 timeout 毫秒内未收到回复,将自动发出错误,表示调用已过期。默认的 timeout 是 -1,将被替换为一个适用于进程间通信的实现定义值(通常为 25 秒)。此超时也是 QDBusPendingCall::waitForFinished() 等待的上限。

请参考 asyncCall() 函数以了解更友好的调用方式。

注意

由于实现限制,对应用程序自己注册的对象进行的调用始终不是异步的。

baseService()#
返回类型:

str

如果此 QDBusConnection 对象已连接,则返回此连接的唯一连接名称,否则返回空 QString。

唯一连接名称是在连接时由 D-Bus 服务器守护进程分配的 ":x.xxx" 格式的字符串(其中 x 为十进制数字)。它在总线上唯一标识此客户端。

对于点对点连接,此函数返回空 QString。

call(message[, mode=QDBus.Block[, timeout=-1]])#
参数:
返回类型:

QDBusMessage

通过此连接发送 message 并阻塞等待最多 timeout 毫秒的回复。此函数仅适用于方法调用。它返回回复消息,其类型为 ReplyMessageErrorMessage

如果在 timeout 毫秒内没有收到回复,将会自动发出错误消息指明调用超时。默认的 timeout 值为 -1,这将用适用于进程间通信的实现定义的值替换(通常为 25 秒)。

有关更友好的调用方式,请参阅 call() 函数。

警告

如果 modeBlockWithGui ,此函数将重新进入 Qt 事件循环以等待回复。在等待期间,它可能会将信号和其他方法调用传递给您的应用。因此,在用 call() 放置调用时必须准备好处理重新进入。

callWithCallback(message, receiver, returnMethod, errorMethod[, timeout=-1])#
参数:
  • messageQDBusMessage

  • receiverQObject

  • returnMethod – 字符串

  • errorMethod – 字符串

  • timeout – int

返回类型:

布尔值

通过此连接发送 message 并立即返回。当收到回复时,在 receiver 对象中调用 returnMethod 方法。如果发生错误,将调用 errorMethod 方法。

如果在 timeout 毫秒内没有收到回复,将会自动发出错误消息指明调用超时。默认的 timeout 值为 -1,这将用适用于进程间通信的实现定义的值替换(通常为 25 秒)。

此函数仅适用于方法调用。只要参数类型匹配且没有发生错误,确保槽将被调用一次带回复。

如果消息已发送,则返回 true;如果消息无法发送,则返回 false

callWithCallback(message, receiver, slot[, timeout=-1])
参数:
返回类型:

布尔值

这是一个重载函数。

通过此连接发送 message 并立即返回。当收到回复时,在 receiver 对象中调用 returnMethod 方法。

此函数仅适用于方法调用。只要参数类型匹配且没有发生错误,确保槽将被调用一次带回复。

此函数有危险,因为它无法报告错误,包括超时过期错误。

如果消息已发送,则返回 true;如果消息无法发送,则返回 false

connect(service, path, interface, name, receiver, slot)#
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

将由 servicepathinterfacename 参数指定的信号连接到对象 receiver 中的 slot。参数 servicepath 可以是空字符串,表示连接到来自任何远程应用程序的任何与 (interfacename) 对的信号。

如果连接成功,则返回 true

警告

只有当参数匹配时,信号才会发送到槽。这种验证只能在收到信号时才能进行,而不能在连接时进行。

connect(service, path, interface, name, signature, receiver, slot)
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • signature – 字符串

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

这是一个重载函数。

将信号连接到对象 receiver 中的 slot。与之前的 connect() 重载不同,此函数允许通过 signature 变量指定要连接的参数签名。然后该函数将验证此签名是否可以传送到由 slot 指定的槽,否则返回 false。

如果连接成功,则返回 true

注意

此函数验证信号签名是否与槽的参数匹配,但它不会验证远程服务是否真的存在具有给定签名的信号。

connect(service, path, interface, name, argumentMatch, signature, receiver, slot)
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • argumentMatch – 字符串列表

  • signature – 字符串

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

这是一个重载函数。

将信号连接到对象 receiver 中的 slot。与之前的 connect() 重载不同,此函数允许通过 signature 变量指定要连接的参数签名。然后该函数将验证此签名是否可以传送到由 slot 指定的槽,否则返回 false。

argumentMatch 参数列出了要按顺序匹配的字符串参数。请注意,为了匹配空字符串,您需要传递一个空但不是空的 QString(例如,QString(“”))。一个空的 QString 将跳过该位置的匹配。

如果连接成功,则返回 true

注意

此函数验证信号签名是否与槽的参数匹配,但它不会验证远程服务是否真的存在具有给定签名的信号。

static connectToBus(type, name)#
参数:
返回类型:

QDBusConnection

打开类型为type的连接以连接到已知的总线之一,并将连接名称name与其关联。返回与该连接关联的QDBusConnection对象。

static connectToBus(address, name)
参数:
  • address – str

  • name – str

返回类型:

QDBusConnection

打开到地址address上的私有总线的连接,并将连接名称name与其关联。返回与该连接关联的QDBusConnection对象。

static connectToPeer(address, name)#
参数:
  • address – str

  • name – str

返回类型:

QDBusConnection

在地址address上打开对等连接,并将其与连接名称name关联。返回与该连接关联的QDBusConnection对象。

connectionCapabilities()#
返回类型:

ConnectionCapability的组合

返回与总线服务器或对等方协商后的连接能力。如果此QDBusConnection未连接,此函数返回无能力。

disconnect(service, path, interface, name, receiver, slot)#
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

断开由servicepathinterfacename参数指定的信号与对象receiverslot的连接。参数必须与传递给connect()函数的参数相同。

如果断开连接成功,则返回 true

disconnect(service, path, interface, name, signature, receiver, slot)
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • signature – 字符串

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

这是一个重载函数。

从对象 receiver 中的槽 slot 断开由 servicepathinterfacenamesignature 参数指定的信号。所需参数必须与传递给 connect() 函数的参数相同。

如果断开连接成功,则返回 true

disconnect(service, path, interface, name, argumentMatch, signature, receiver, slot)
参数:
  • service – 字符串

  • path – 字符串

  • interface – 字符串

  • name – str

  • argumentMatch – 字符串列表

  • signature – 字符串

  • receiverQObject

  • slot – 字符串

返回类型:

布尔值

这是一个重载函数。

从对象 receiver 中的槽 slot 断开由 servicepathinterfacenameargumentMatchsignature 参数指定的信号。所需参数必须与传递给 connect() 函数的参数相同。

如果断开连接成功,则返回 true

static disconnectFromBus(name)#
参数:

name – str

关闭名为 name 的总线连接。

请注意,如果还存在与同一连接关联的 QDBusConnection 对象,则连接不会关闭,直到所有引用被释放。但是,无法使用 QDBusConnection 构造函数创建更多引用。

static disconnectFromPeer(name)#
参数:

name – str

关闭名为 name 的对等连接。

请注意,如果还存在与同一连接关联的 QDBusConnection 对象,则连接不会关闭,直到所有引用被释放。但是,无法使用 QDBusConnection 构造函数创建更多引用。

接口()#
返回类型:

QDBusConnectionInterface

返回一个代表本连接上 D-Bus 服务器接口的 QDBusConnectionInterface 对象。

internalPointer()#
返回类型:

void

isConnected()#
返回类型:

布尔值

如果此 QDBusConnection 对象已连接,则返回 true

lastError()#
返回类型:

QDBusError

返回在此连接中发生的最后一个错误。

此函数为低级代码提供。如果您正在使用 call() ,错误代码将通过其返回值报告。

有关内容,请参阅

QDBusInterface QDBusMessage

static localMachineId()#
返回类型:

QByteArray

返回 D-Bus 系统已知的本地机器 ID。每个运行 D-Bus 的节点或主机都有一个唯一的标识符,它可以用来在共享资源(如文件系统)的情况下区分不同的主机。

请注意,本地机器 ID 不保证在系统重启后维持不变,因此不应将此标识符存储在持久存储(如文件系统)中。它在此启动会话的整个生命周期内保持不变。

name()#
返回类型:

str

返回该连接的连接名称,作为 connectToBus() 中给定的名称参数。

可以使用连接名称来唯一标识实际的底层总线连接。从单个连接创建的副本将始终隐式共享底层连接,因此将具有相同的连接名称。

相反,具有不同连接名称的两个连接将始终连接到不同的总线,或者在该总线上具有不同的唯一名称(如由 baseService() 返回的)。

有关内容,请参阅

connectToBus() disconnectFromBus()

objectRegisteredAt(path)#
参数:

path – 字符串

返回类型:

QObject

返回在给定路径通过 pathregisterObject() 注册的对象。

registerObject(path, interface, object[, options=QDBusConnection.RegisterOption.ExportAdaptors])#
参数:
返回类型:

布尔值

这是一个重载函数。

在路径 path 上注册对象 object,接口 interface 的名称,并且如果注册成功则返回 true。参数 options 指定了将暴露多少对象 object 通过 D-Bus。

此函数不替换现有对象:如果路径 path 已有一个注册的对象,此函数将返回 false。请先使用 unregisterObject() 注销它。

ExportChildObjects 标志根据注册对象路径和子 QObject::objectName 导出儿童对象。因此,重要的是子对象必须有一个对象名称。

您不能将对象作为具有 ExportChildObjects 的对象的子对象进行注册。

registerObject(path, object[, options=QDBusConnection.RegisterOption.ExportAdaptors])
参数:
返回类型:

布尔值

在路径 path 上注册对象 object,并且如果注册成功则返回 true。参数 options 指定了将通过 D-Bus 暴露对象 object 的多少。

此函数不替换现有对象:如果路径 path 已有一个注册的对象,此函数将返回 false。请先使用 unregisterObject() 注销它。

ExportChildObjects 标志根据注册对象路径和子 QObject::objectName 导出儿童对象。因此,重要的是子对象必须有一个对象名称。

您不能将对象作为具有 ExportChildObjects 的对象的子对象进行注册。

registerService(serviceName)#
参数:

serviceName – 字符串

返回类型:

布尔值

尝试在 D-Bus 服务器上注册 serviceName 并返回如果注册成功则返回 true。如果另一个应用程序已经注册了该名称,则注册将失败。

有关内容,请参阅

unregisterService() registerService()

registerVirtualObject(path, object[, options=QDBusConnection.VirtualObjectRegisterOption.SingleNode])#
参数:
返回类型:

布尔值

send(message)#
参数:

messageQDBusMessage

返回类型:

布尔值

将消息发送到该连接,不等待回复。这适用于错误、信号、返回值以及不需要返回值的调用。

如果消息成功入队,则返回true,否则为false。

静态sessionBus()#
返回类型:

QDBusConnection

返回一个使用会话总线打开的QDBusConnection对象。该函数返回的对象引用在应用终止之前有效,此时将关闭连接并删除对象。

swap(other)#
参数:

otherQDBusConnection

将此QDBusConnection实例与other交换。

静态systemBus()#
返回类型:

QDBusConnection

返回一个使用系统总线打开的QDBusConnection对象。该函数返回的对象引用在QCoreApplication析构函数运行时有效,此时连接将关闭并且对象将被删除。

unregisterObject(path[, mode=QDBusConnection.UnregisterMode.UnregisterNode])#
参数:

通过指定路径使用registerObject()注册的对象路径,取消注册对象,如果modeUnregisterTree,则会取消注册其所有子对象。

注意,您不能取消注册未使用registerObject()注册的对象。

unregisterService(serviceName)#
参数:

serviceName – 字符串

返回类型:

布尔值

取消注册与registerService()先前注册的服务serviceName,如果成功则返回true

有关内容,请参阅

registerService()unregisterService()