QDBusConnection 类
QDBusConnection 类表示与 D-Bus 总线守护进程的连接。 更多...
头文件 | #include <QDBusConnection> |
CMake | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake | QT += dbus |
公共类型
枚举 | BusType { SessionBus, SystemBus, ActivationBus } |
标志 | ConnectionCapabilities |
枚举 | ConnectionCapability { UnixFileDescriptorPassing } |
枚举 | RegisterOption { ExportAdaptors, ExportScriptableSlots, ExportScriptableSignals, ExportScriptableProperties, ExportScriptableInvokables, …, ExportChildObjects } |
标志 | RegisterOptions |
枚举 | UnregisterMode { UnregisterNode, UnregisterTree } |
标志 | 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会话的起点。通过它,您可以访问远程对象、接口;将远程信号连接到您的对象的槽;注册对象等。
使用 connectToBus() 函数创建D-Bus连接,该函数打开到服务器守护进程的连接并进行初始握手,将连接与某个名称关联。使用相同名称再次尝试连接将返回相同的连接。
然后使用 disconnectFromBus() 函数断开连接。
一旦断开连接,调用 connectToBus() 将不会重新建立连接,您必须创建一个新的 QDBusConnection 实例。
为了方便使用最常见的两种连接类型,sessionBus() 和 systemBus() 函数分别返回到会话服务器守护进程和系统服务器守护进程的开放连接。这些连接在首次使用时打开,当运行 QCoreApplication 析构函数时关闭。
D-Bus 也支持点对点连接,无需使用总线服务器守护进程。利用此功能,两个应用程序可以相互通信并交换消息。这可以通过传递给 connectToBus() 函数的地址来实现,该函数由使用 QDBusServer 打开的另一个 D-Bus 应用程序发起。
成员类型文档
enum QDBusConnection::BusType
指定总线连接的类型。有效的总线类型包括
常量 | 值 | 说明 |
---|---|---|
QDBusConnection::SessionBus | 0 | 会话总线,与运行的桌面会话相关联 |
QDBusConnection::SystemBus | 1 | 系统总线,用于与系统范围内的进程通信 |
QDBusConnection::ActivationBus | 2 | 激活总线,是启动服务的总线“别名” |
在会话总线上,可以找到与其他用户共享同一桌面会话的其他应用程序(因此得名)。然而,在系统总线上,通常可以找到为整个系统共享的进程。
enum QDBusConnection::ConnectionCapability
flags QDBusConnection::ConnectionCapabilities
此枚举描述了 D-Bus 连接的可用功能。
常量 | 值 | 说明 |
---|---|---|
QDBusConnection::UnixFileDescriptorPassing | 0x0001 | 启用将 Unix 文件描述符传递给其他进程的功能(参见 QDBusUnixFileDescriptor) |
ConnectionCapabilities 类型是 QFlags<ConnectionCapability> 的 typedef。它存储了 ConnectionCapability 值的 OR 组合。
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> 的 typedef。它存储了 RegisterOption 值的 OR 组合。
另请参阅registerObject、QDBusAbstractAdaptor 和 使用适配器。
枚举 QDBusConnection::UnregisterMode
注销对象路径的模式
常量 | 值 | 说明 |
---|---|---|
QDBusConnection::UnregisterNode | 0 | 仅注销此节点:不注销子对象 |
QDBusConnection::UnregisterTree | 1 | 注销此节点及其所有子树 |
注意,但是,如果此对象使用 ExportChildObjects 选项进行注册,则 UnregisterNode 也会注销子对象。
成员函数文档
[显式构造函数]
QDBusConnection::QDBusConnection(const QString &name)
创建一个附加到名为 name 的连接的 QDBusConnection 对象。
这不会打开连接。您必须调用 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
通过此连接发送消息,并阻塞等待最多 超时 毫秒的回复。此函数仅适用于方法调用。它返回回复消息作为返回值,该值将是 QDBusMessage::ReplyMessage 或 QDBusMessage::ErrorMessage 之一。
如果在 超时 毫秒内没有收到回复,将会自动发送一个错误,表示调用已过期。默认的 超时 是 -1,将被替换为实现定义的适合进程间通信的值(通常为 25 秒)。
请参阅 QDBusInterface::call() 函数,它是一种更友好的放置调用的方式。
警告:如果 模式 是 QDBus::BlockWithGui,此函数将重新进入 Qt 事件循环以等待回复。在等待过程中,它可能会向您的应用程序发送信号和其他方法调用。因此,必须在调用 call() 时处理好任何重入。
bool QDBusConnection::callWithCallback(const QDBusMessage &message, QObject *receiver, const char *returnMethod, const char *errorMethod, int timeout = -1) const
通过此连接发送消息,并立即返回。在收到回复时,将在 receiver 对象中调用方法 returnMethod。如果发生错误,将调用方法 errorMethod。
如果在 超时 毫秒内没有收到回复,将会自动发送一个错误,表示调用已过期。默认的 超时 是 -1,将被替换为实现定义的适合进程间通信的值(通常为 25 秒)。
此函数仅适用于方法调用。只要参数类型匹配且没有发生错误,就可以保证槽将只被调用一次,并带有回复。
如果消息已发送返回 true
,否则返回 false
。
bool QDBusConnection::connect(const QString &service, const QString &path, const QString &interface, const QString &name, QObject *receiver, const char *slot)
将指定由 服务、路径、接口 和 名称 参数的信号连接到对象 receiver 的插槽 slot。参数 服务 和 路径 可以是空的,表示连接到任意远程应用程序中 (接口,名称) 对的信号的任何信号。
如果连接成功,返回 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对象,该对象为空但非null(即,QString(""))。传递null QString将跳过该位置的匹配。
如果连接成功,返回 true
。
注意:此函数验证信号签名是否与槽的参数匹配,但它不会验证远程服务是否存在具有给定签名的实际信号。
[静态]
QDBusConnection QDBusConnection::connectToBus(QDBusConnection::BusType type, const QString &name)
打开类型为type的连接,关联到已知的其中一个总线,并使用连接名name与之关联。返回与该连接关联的 QDBusConnection 对象。
[静态]
QDBusConnection QDBusConnection::connectToBus(const QString &address, const QString &name)
打开地址为address的私有总线的连接,并使用连接名name与之关联。返回与该连接关联的 QDBusConnection 对象。
[静态]
QDBusConnection QDBusConnection::connectToPeer(const QString &address, const QString &name)
在地址address上打开P2P连接,并使用连接名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
。
[静态]
void QDBusConnection::disconnectFromBus(const QString &name)
关闭名称为 name 的总线连接。
注意,如果有与同一连接关联的 QDBusConnection 对象,则连接只有在所有引用都释放后才会关闭。然而,不能使用 QDBusConnection 构造函数创建更多引用。
[静态]
void QDBusConnection::disconnectFromPeer(const QString &name)
关闭名称为 name 的对端连接。
注意,如果有与同一连接关联的 QDBusConnection 对象,则连接只有在所有引用都释放后才会关闭。然而,不能使用 QDBusConnection 构造函数创建更多引用。
QDBusConnectionInterface *QDBusConnection::interface() const
返回一个表示此连接上 D-Bus 服务器接口的 QDBusConnectionInterface 对象。
bool QDBusConnection::isConnected() const
如果此 QDBusConnection 对象已连接,则返回 true
。
QDBusError QDBusConnection::lastError() const
返回此连接中发生的最后一个错误。
此功能为底层代码提供。如果您正在使用 QDBusInterface::call(),错误代码将由其返回值报告。
另请参阅 QDBusInterface 和 QDBusMessage。
[静态]
QByteArray QDBusConnection::localMachineId()
返回 D-Bus 系统所知的本地计算机 ID。每个运行 D-Bus 的节点或主机都有一个唯一的标识符,可以用来区分与其他主机如果它们共享资源,如文件系统。
请注意,本地计算机 ID 不保证在系统启动过程中持久,因此此标识符不应存储在持久存储(如文件系统)中。它保证在此启动会话的生命周期内保持恒定。
QString QDBusConnection::name() const
返回此连接的连接名称,即作为 connectToBus() 的名称参数给出的名称。
连接名称可以用来唯一标识实际连接到总线的底层连接。从单个连接创建的副本将始终隐式共享底层连接,因此将具有相同的连接名称。
相反,具有不同连接名称的连接将始终连接到不同的总线,或者在该总线上具有不同的唯一名称(如由 baseService() 返回的名称)。
另请参阅 connectToBus() 和 disconnectFromBus。
QObject *QDBusConnection::objectRegisteredAt(const QString &path) const
返回在对象路径 path 上使用 registerObject() 注册的对象。
bool QDBusConnection::registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
在路径 path 上注册对象 object 并返回注册是否成功的 true
。 options 参数指定对象 object 将通过 D-Bus 暴露多少。
此功能不替换现有对象:如果在路径 path 上已经注册了对象,则此函数将返回 false。请使用 unregisterObject() 首先取消注册。
ExportChildObjects 标志基于已注册对象的路径和子对象的 QObject::objectName 在 D-Bus 上导出子对象。因此,对子对象来说,有一个对象名称很重要。
无法将对象注册为已使用ExportChildObjects注册的对象的子对象。
bool QDBusConnection::registerObject(const QString &path, const QString &interface, QObject *object, QDBusConnection::RegisterOptions options = ExportAdaptors)
这是一个重载函数。
注册对象 object 到路径 path 并使用接口 interface,如果注册成功则返回 true
。参数 options 指定对象 object 通过 D-Bus 暴露的程度。
此功能不替换现有对象:如果在路径 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)
与此 QDBusConnection 实例交换 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)
注销 previously registered with registerService() 的服务 serviceName,如果操作成功则返回 true。
另请参阅 registerService() 和 QDBusConnectionInterface::unregisterService。
QDBusConnection & QDBusConnection::operator=(const QDBusConnection &other)
在当前对象中创建连接 other 的副本。请注意,在复制之前,此对象引用的连接不会自发断开。
另请参阅 disconnectFromBus。
© 2024 The Qt Company Ltd. 本文件中的文档贡献归其各自所有者所有。提供在此的文档是根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款许可的。Qt 和相应的商标是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。