QDBusConnection Class
QDBusConnection 类表示与 D-Bus 总线守护进程的连接。更多
Header: | #include <QDBusConnection> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake: | QT += dbus |
公共类型
enum | BusType { SessionBus, SystemBus, ActivationBus } |
flags | ConnectionCapabilities |
enum | ConnectionCapability { UnixFileDescriptorPassing } |
enum | RegisterOption { ExportAdaptors, ExportScriptableSlots, ExportScriptableSignals, ExportScriptableProperties, ExportScriptableInvokables, …, ExportChildObjects } |
flags | RegisterOptions |
enum | UnregisterMode { UnregisterNode, UnregisterTree } |
flags | VirtualObjectRegisterOptions |
公共函数
QDBusConnection(const QString &name) | |
QDBusConnection(const QDBusConnection &other) | |
~QDBusConnection() | |
QDBusPendingCall | asyncCall(const QDBusMessage &message, int timeout = -1) const |
QString | baseService() const |
QDBusMessage | call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const |
bool | callWithCallback(const QDBusMessage &message, QObject *receiver, const char *returnMethod, const char *errorMethod, int timeout = -1) const |
bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot) |
bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot) |
bool | connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot) |
QDBusConnection::ConnectionCapabilities | connectionCapabilities() const |
bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot) |
bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot) |
bool | disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot) |
QDBusConnectionInterface * | interface() const |
bool | isConnected() const |
QDBusError | lastError() const |
QString | name() const |
QObject * | objectRegisteredAt(const QString &path) const |
bool | registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors) |
bool | registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors) |
bool | registerService(const QString &serviceName) |
bool | send(const QDBusMessage &message) const |
void | swap(QDBusConnection &other) |
void | unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = UnregisterNode) |
bool | unregisterService(const QString &serviceName) |
QDBusConnection & | operator=(const QDBusConnection &other) |
静态公共成员
QDBusConnection | connectToBus(QDBusConnection::BusType type, const QString &name) |
QDBusConnection | connectToBus(const QString &address, const QString &name) |
QDBusConnection | connectToPeer(const QString &address, const QString &name) |
void | disconnectFromBus(const QString &name) |
void | disconnectFromPeer(const QString &name) |
QByteArray | localMachineId() |
QDBusConnection | sessionBus() |
QDBusConnection | systemBus() |
详细说明
该类是 D-Bus 会话的初始点。使用该类,您可以访问远程对象和接口;将远程信号连接到您对象的插槽;注册对象等。
D-Bus 连接是通过connectToBus() 函数创建的,该函数会打开一个与服务器守护进程的连接,并进行初始握手,将该连接与一个名称关联起来。使用相同名称的进一步连接尝试将返回相同的连接。
然后使用disconnectFromBus() 函数中断连接。
一旦断开连接,调用connectToBus() 将无法重新建立连接,您必须创建一个新的 QDBusConnection 实例。
为了方便两种最常见的连接类型,sessionBus() 和systemBus() 函数分别返回会话服务器守护进程和系统服务器守护进程的打开连接。这些连接在首次使用时打开,并在运行QCoreApplication 析构函数时关闭。
D-Bus 还支持点对点连接,无需总线服务器守护进程。利用这一功能,两个应用程序可以相互对话并交换信息。这可以通过向connectToBus() 函数传递一个地址来实现,该地址由另一个 D-Bus 应用程序使用QDBusServer 打开。
成员类型文档
enum QDBusConnection::BusType
指定总线连接类型。有效的总线类型有
常量 | 值 | 描述 |
---|---|---|
QDBusConnection::SessionBus | 0 | 会话总线,与正在运行的桌面会话相关联 |
QDBusConnection::SystemBus | 1 | 系统总线,用于与系统进程通信 |
QDBusConnection::ActivationBus | 2 | 激活总线,启动服务的总线的 "别名 |
在会话总线上,可以找到同一用户共享同一桌面会话的其他应用程序(因此得名)。而在系统总线上,通常能找到整个系统共享的进程。
枚举 QDBusConnection::ConnectionCapability
flags QDBusConnection::ConnectionCapabilities
该枚举描述了 D-Bus 连接的可用功能。
常量 | 值 | 描述 |
---|---|---|
QDBusConnection::UnixFileDescriptorPassing | 0x0001 | 允许将 Unix 文件描述符传递给其他进程(请参阅QDBusUnixFileDescriptor )。 |
ConnectionCapabilities 类型是QFlags<ConnectionCapability> 的类型定义。它存储 ConnectionCapability 值的 OR 组合。
另请参阅 connectionCapabilities().
enum QDBusConnection::RegisterOption
flags QDBusConnection::RegisterOptions
指定连接注册对象的选项。可能的值有
常量 | 值 | 说明 |
---|---|---|
QDBusConnection::ExportAdaptors | 0x01 | 导出此对象中的适配器内容 |
QDBusConnection::ExportScriptableSlots | 0x10 | 导出此对象的脚本槽 |
QDBusConnection::ExportScriptableSignals | 0x20 | 导出此对象的脚本信号 |
QDBusConnection::ExportScriptableProperties | 0x40 | 导出此对象的脚本属性 |
QDBusConnection::ExportScriptableInvokables | 0x80 | 导出此对象的可编写脚本的调用程序 |
QDBusConnection::ExportScriptableContents | 0xf0 | ExportScriptableSlots | ExportScriptableSignals | ExportScriptableProperties 的简写形式 |
QDBusConnection::ExportNonScriptableSlots | 0x100 | 导出此对象的非脚本槽 |
QDBusConnection::ExportNonScriptableSignals | 0x200 | 导出此对象的非脚本信号 |
QDBusConnection::ExportNonScriptableProperties | 0x400 | 导出此对象的非脚本属性 |
QDBusConnection::ExportNonScriptableInvokables | 0x800 | 导出此对象的不可脚本调用项 |
QDBusConnection::ExportNonScriptableContents | 0xf00 | ExportNonScriptableSlots | ExportNonScriptableSignals | ExportNonScriptableProperties 的缩写形式 |
QDBusConnection::ExportAllSlots | ExportScriptableSlots|ExportNonScriptableSlots | 导出此对象的所有插槽 |
QDBusConnection::ExportAllSignals | ExportScriptableSignals|ExportNonScriptableSignals | 导出此对象的所有信号 |
QDBusConnection::ExportAllProperties | ExportScriptableProperties|ExportNonScriptableProperties | 导出此对象的所有属性 |
QDBusConnection::ExportAllInvokables | ExportScriptableInvokables|ExportNonScriptableInvokables | 导出此对象的所有可调用内容 |
QDBusConnection::ExportAllContents | ExportScriptableContents|ExportNonScriptableContents | 导出此对象的所有内容 |
QDBusConnection::ExportChildObjects | 0x1000 | 导出此对象的子对象 |
RegisterOptions 类型是QFlags<RegisterOption> 的类型定义。它存储 RegisterOption 值的 OR 组合。
另请参阅 registerObject(),QDBusAbstractAdaptor, 和使用适配器。
enum QDBusConnection::UnregisterMode
取消注册对象路径的模式:
常量 | 值 | 说明 |
---|---|---|
QDBusConnection::UnregisterNode | 0 | 仅取消注册此节点:不取消注册子对象 |
QDBusConnection::UnregisterTree | 1 | 取消注册此节点及其所有子树 |
但请注意,如果该对象是使用ExportChildObjects 选项注册的,则 UnregisterNode 也将取消注册子对象。
成员函数文档
[explicit]
QDBusConnection::QDBusConnection(const QString &name)
创建一个 QDBusConnection 对象,该对象连接到名称为name 的连接。
这不会打开连接。您必须调用connectToBus() 才能打开它。
QDBusConnection::QDBusConnection(const QDBusConnection &other)
创建other 连接的副本。
[noexcept]
QDBusConnection::~QDBusConnection()
处理该对象。这不会关闭连接:必须调用disconnectFromBus() 才能关闭连接。
QDBusPendingCall QDBusConnection::asyncCall(const QDBusMessage &message, int timeout = -1) const
通过此连接发送message 并立即返回。该函数仅适用于方法调用。它返回一个QDBusPendingCall 类型的对象,可用于跟踪回复状态。
如果在timeout 毫秒内未收到回复,则会自动发送错误信息,说明调用已过期。timeout 的默认值是-1,它将被一个适合进程间通信的实现定义值(一般为 25 秒)所取代。该超时也是 QDBusPendingCall::waitForFinished() 中等待的上限。
请参阅QDBusInterface::asyncCall() 函数,了解更友好的调用方式。
注意: 由于实现上的限制,对应用程序本身注册的对象的方法调用永远不会是异步的。
QString QDBusConnection::baseService() const
如果QDBusConnection 对象已连接,则返回此连接的唯一连接名,否则返回空QString 。
唯一连接名称是一个字符串,格式为":x.xxx"(其中 x 为十进制数字),由 D-Bus 服务器守护进程在连接时分配。它在总线中唯一标识该客户机。
对于点对点连接,该函数返回空QString 。
QDBusMessage QDBusConnection::call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const
通过此连接发送message ,并阻塞至多timeout 毫秒,等待回复。该函数仅适用于方法调用。它的返回值是回复消息,类型为QDBusMessage::ReplyMessage 或QDBusMessage::ErrorMessage 。
如果在timeout 毫秒内未收到回复,则会自动发送错误信息,说明调用已过期。timeout 的默认值是-1,它将被一个适合进程间通信的实现定义值(一般为 25 秒)所取代。
有关更友好的调用方式,请参阅QDBusInterface::call() 函数。
警告: 如果mode 是QDBus::BlockWithGui ,该函数将重新进入 Qt XML 事件循环,以等待回复。在等待期间,它可能会向您的应用程序发送信号和其他方法调用。因此,在使用 call() 进行调用时,必须做好处理重入的准备。
bool QDBusConnection::callWithCallback(const QDBusMessage &message, QObject *receiver, const char *returnMethod, const char *errorMethod, int timeout = -1) const
通过此连接发送message 并立即返回。收到回复后,receiver 对象中的方法returnMethod 将被调用。如果出现错误,将调用errorMethod 方法。
如果在timeout 毫秒内未收到回复,将自动发送错误信息,说明调用已过期。timeout 的默认值为-1,它将被一个适合进程间通信的实现定义值(一般为 25 秒)所取代。
该函数仅适用于方法调用。只要参数类型匹配且不出错,就能保证该槽与回复一起被调用一次。
如果信息已发送,则返回true
;如果信息无法发送,则返回 false。
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
将service,path,interface 和name 参数指定的信号连接到对象receiver 中的槽slot 。参数service 和path 可以为空,表示连接到任何远程应用程序的 (interface,name) 信号对中的任何信号。
如果连接成功,则返回true
。
警告: 只有在参数匹配的情况下,信号才会传送到插槽。只有在收到信号时才能进行验证,而不是在连接时。
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot)
这是一个重载函数。
将信号连接到对象receiver 中的槽slot 。与之前的 connect() 重载不同,该函数允许使用signature 变量指定要连接的参数签名。然后,函数将验证该签名是否能被传送到slot 指定的插槽,否则将返回 false。
如果连接成功,则返回true
。
注意: 此函数将验证信号签名是否与插槽参数相匹配,但不会验证远程服务中是否存在具有给定签名的实际信号。
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot)
这是一个重载函数。
将信号连接到对象receiver 中的槽slot 。与之前的 connect() 重载不同,该函数允许使用signature 变量指定要连接的参数签名。然后,函数将验证该签名是否能被传送到slot 指定的插槽,否则将返回 false。
argumentMatch 参数按顺序列出了要匹配的字符串参数。请注意,要匹配空字符串,需要传递一个空但不为空的QString (即QString("") )。空QString 会跳过该位置的匹配。
如果连接成功,则返回true
。
注意: 此函数将验证信号签名是否与槽的参数匹配,但不会验证远程服务中是否存在具有给定签名的实际信号。
[static]
QDBusConnection QDBusConnection::connectToBus(QDBusConnection::BusType type, const QString &name)
打开一个与已知总线之一相连的type 类型的连接,并将连接名称name 与之关联。返回与该连接相关联的QDBusConnection 对象。
[static]
QDBusConnection QDBusConnection::connectToBus(const QString &address, const QString &name)
打开与地址为address 的私有总线的连接,并将连接名称name 与之关联。返回与该连接相关联的QDBusConnection 对象。
[static]
QDBusConnection QDBusConnection::connectToPeer(const QString &address, const QString &name)
在address 地址上打开点对点连接,并将连接名称name 与之关联。返回与该连接相关联的QDBusConnection 对象。
QDBusConnection::ConnectionCapabilities QDBusConnection::connectionCapabilities() const
返回与总线服务器或对等设备协商确定的此连接功能。如果QDBusConnection 未连接,则该函数不返回任何功能。
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
断开service 、path 、interface 和name 参数指定的信号与对象receiver 中插槽slot 的连接。参数必须与传递给connect() 函数的参数相同。
如果断开成功,则返回true
。
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, QObject *receiver, const char *slot)
这是一个重载函数。
断开service,path,interface,name, 和signature 参数指定的信号与对象receiver 中插槽slot 的连接。参数必须与传递给connect() 函数的参数相同。
如果断开成功,则返回true
。
bool QDBusConnection::disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, QObject *receiver, const char *slot)
这是一个重载函数。
断开service,path,interface,name,argumentMatch, 和signature 参数指定的信号与对象receiver 中插槽slot 的连接。参数必须与传递给connect() 函数的参数相同。
如果断开连接成功,则返回true
。
[static]
void QDBusConnection::disconnectFromBus(const QString &name)
关闭名称为name 的总线连接。
请注意,如果仍有QDBusConnection 对象与同一连接相关联,则在删除所有引用之前不会关闭该连接。但是,不能再使用QDBusConnection 构造函数创建其他引用。
[static]
void QDBusConnection::disconnectFromPeer(const QString &name)
关闭名称为name 的对等连接。
请注意,如果仍有QDBusConnection 对象与同一连接相关联,则在删除所有引用之前不会关闭连接。但是,不能再使用QDBusConnection 构造函数创建其他引用。
QDBusConnectionInterface *QDBusConnection::interface() const
返回QDBusConnectionInterface 对象,该对象表示此连接上的 D-Bus 服务器接口。
bool QDBusConnection::isConnected() const
如果QDBusConnection 对象已连接,则返回true
。
QDBusError QDBusConnection::lastError() const
返回此连接中发生的最后一次错误。
该函数用于底层代码。如果使用QDBusInterface::call(),错误代码将通过其返回值报告。
另请参阅 QDBusInterface 和QDBusMessage 。
[static]
QByteArray QDBusConnection::localMachineId()
返回 D-Bus 系统已知的本地机器 ID。运行 D-Bus 的每个节点或主机都有一个唯一的标识符,如果它们共享文件系统等资源,该标识符可用于将其与其他主机区分开来。
请注意,本地机器 ID 无法保证在系统启动时保持不变,因此不应将此标识符存储在持久存储(如文件系统)中。它只能在本次启动会话期间保持不变。
QString QDBusConnection::name() const
返回此连接的连接名称,如connectToBus() 的 name 参数所示。
连接名称可用于唯一标识总线的实际底层连接。从单个连接复制的连接将始终隐式共享底层连接,因此将具有相同的连接名称。
反之,具有不同连接名称的两个连接要么连接到不同的总线,要么在该总线上具有不同的唯一名称(如baseService() 所返回)。
另请参阅 connectToBus() 和disconnectFromBus()。
QObject *QDBusConnection::objectRegisteredAt(const QString &path) const
返回registerObject() 在path 给定的对象路径下注册的对象。
bool QDBusConnection::registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
在路径path 注册对象object ,如果注册成功,则返回true
。options 参数指定通过 D-Bus 公开对象object 的程度。
此函数不会替换现有对象:如果已有对象在路径path 注册,此函数将返回 false。请先使用unregisterObject() 取消注册。
ExportChildObjects 标志根据已注册对象的路径和子对象的QObject::objectName 在 D-Bus 上导出子对象。因此,子对象必须有一个对象名称。
您不能将一个对象注册为通过ExportChildObjects 注册的对象的子对象。
bool QDBusConnection::registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
这是一个重载函数。
以接口名interface 注册路径path 上的对象object ,如果注册成功,则返回true
。options 参数指定通过 D-Bus 公开对象object 的程度。
此函数不会替换现有对象:如果已有对象在路径path 注册,此函数将返回 false。请先使用unregisterObject() 取消注册。
ExportChildObjects 标志根据已注册对象的路径和子对象的QObject::objectName 在 D-Bus 上导出子对象。因此,子对象必须有一个对象名称。
您不能将一个对象注册为通过ExportChildObjects 注册的对象的子对象。
bool QDBusConnection::registerService(const QString &serviceName)
尝试在 D-Bus 服务器上注册serviceName ,如果注册成功,则返回true
。如果该名称已被其他应用程序注册,则注册失败。
另请参阅 unregisterService() 和QDBusConnectionInterface::registerService()。
bool QDBusConnection::send(const QDBusMessage &message) const
通过该连接发送message ,无需等待回复。这适用于错误、信号、返回值以及不需要返回值的调用。
如果信息排队成功,则返回true
,否则返回 false。
[static]
QDBusConnection QDBusConnection::sessionBus()
返回通过会话总线打开的QDBusConnection 对象。此函数返回的对象引用在应用程序终止前一直有效,应用程序终止后连接将被关闭,对象也将被删除。
[noexcept]
void QDBusConnection::swap(QDBusConnection &other)
将此连接与other 互换。该操作速度非常快,从未出现过故障。
[static]
QDBusConnection QDBusConnection::systemBus()
返回通过系统总线打开的QDBusConnection 对象。该函数返回的对象引用在QCoreApplication 的析构函数运行前一直有效,届时连接将被关闭,对象也将被删除。
void QDBusConnection::unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = UnregisterNode)
在path 给定的对象路径上取消注册registerObject() 注册的对象,如果mode 是QDBusConnection::UnregisterTree ,则也取消注册其所有子对象。
请注意,不能解除注册未通过registerObject() 注册的对象。
bool QDBusConnection::unregisterService(const QString &serviceName)
取消注册之前通过registerService() 注册的服务serviceName ,如果成功则返回true
。
另请参阅 registerService() 和QDBusConnectionInterface::unregisterService()。
QDBusConnection &QDBusConnection::operator=(const QDBusConnection &other)
创建该对象中连接other 的副本。请注意,该对象在复制之前引用的连接不会自动断开。
另请参阅 disconnectFromBus()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.