QDBusServiceWatcher Class
QDBusServiceWatcher 类允许用户观察公交服务变化。更多
Header: | #include <QDBusServiceWatcher> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake: | QT += dbus |
继承: | QObject |
公共类型
flags | WatchMode |
enum | WatchModeFlag { WatchForRegistration, WatchForUnregistration, WatchForOwnerChange } |
属性
- watchMode : WatchMode
- watchedServices : QStringList
公共功能
QDBusServiceWatcher(QObject *parent = nullptr) | |
QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, QDBusServiceWatcher::WatchMode watchMode = WatchForOwnerChange, QObject *parent = nullptr) | |
virtual | ~QDBusServiceWatcher() |
void | addWatchedService(const QString &newService) |
QBindable<QDBusServiceWatcher::WatchMode> | bindableWatchMode() |
QBindable<QStringList> | bindableWatchedServices() |
QDBusConnection | connection() const |
bool | removeWatchedService(const QString &service) |
void | setConnection(const QDBusConnection &connection) |
void | setWatchMode(QDBusServiceWatcher::WatchMode mode) |
void | setWatchedServices(const QStringList &services) |
QDBusServiceWatcher::WatchMode | watchMode() const |
QStringList | watchedServices() const |
信号
void | serviceOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner) |
void | serviceRegistered(const QString &serviceName) |
void | serviceUnregistered(const QString &serviceName) |
详细说明
QDBusServiceWatcher 对象可用于通知应用程序总线上服务名称的所有权变更。它有三种监视模式:
- 只监视服务注册。
- 只监视服务取消注册。
- 监视任何类型的服务所有权变更(默认模式)。
除了创建或删除之外,服务还可能在未进行取消注册/注册操作的情况下改变所有者。因此,如果发生这种情况,serviceRegistered() 和serviceUnregistered() 信号可能不会发出。
该类比使用 QDBusConnectionInterface::serviceOwnerChanged() 信号更有效,因为它只允许接收该类感兴趣的信号。
以字符 "*"结尾的服务名称将匹配指定名称空间内的所有服务名称。
例如,"com.example.backend1*"将匹配
- com.example.backend1
- com.example.backend1.foo
- com.example.backend1.foo.bar
同一域中的子字符串不会被匹配,例如 "com.example.backend12"。
另请参阅 QDBusConnection 。
成员类型文档
enum QDBusServiceWatcher::WatchModeFlag
flags QDBusServiceWatcher::WatchMode
QDBusServiceWatcher 支持三种不同的监视模式,由该标志配置:
常量 | 值 | 描述 |
---|---|---|
QDBusServiceWatcher::WatchForRegistration | 0x01 | 仅监视服务注册,忽略与其他服务所有权更改相关的任何信号。 |
QDBusServiceWatcher::WatchForUnregistration | 0x02 | 仅监视服务取消注册,忽略与其他服务所有权变更相关的任何信号。 |
QDBusServiceWatcher::WatchForOwnerChange | 0x03 | 监视任何类型的服务所有权变更。 |
WatchMode 类型是QFlags<WatchModeFlag> 的类型定义。它存储 WatchModeFlag 值的 OR 组合。
属性文档
[bindable]
watchMode : WatchMode
注: 该属性支持QProperty 绑定。
此属性保存此QDBusServiceWatcher 对象的当前监视模式。
该属性的默认值是 QDBusServiceWatcher::WatchForOwnershipChange。
[bindable]
watchedServices : QStringList
注意: 该属性支持QProperty 绑定。
该属性保存所监视的服务列表。
注意: 使用 setServicesWatched() 修改此列表是一项昂贵的操作。如果可以,最好通过addWatchedService() 和removeWatchedService() 进行修改。
成员函数文档
[explicit]
QDBusServiceWatcher::QDBusServiceWatcher(QObject *parent = nullptr)
创建 QDBusServiceWatcher 对象。请注意,在使用setConnection() 设置连接之前,该对象不会发出任何信号。
parent 参数将传递给QObject ,以设置此对象的父对象。
QDBusServiceWatcher::QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, QDBusServiceWatcher::WatchMode watchMode = WatchForOwnerChange, QObject *parent = nullptr)
创建 QDBusServiceWatcher 对象并将其附加到connection 连接。此外,该函数会立即开始观察watchMode 服务service 的变化。
parent 参数传递给QObject ,以设置该对象的父对象。
[virtual noexcept]
QDBusServiceWatcher::~QDBusServiceWatcher()
销毁QDBusServiceWatcher 对象并释放与其相关的任何资源。
void QDBusServiceWatcher::addWatchedService(const QString &newService)
将newService 添加到此对象要监视的服务列表中。该函数比setWatchedServices() 更有效,应尽可能用于添加服务。
删除watchedServices 的任何现有绑定。
QDBusConnection QDBusServiceWatcher::connection() const
返回此对象所连接的QDBusConnection 。
另请参阅 setConnection()。
bool QDBusServiceWatcher::removeWatchedService(const QString &service)
从该对象监视的服务列表中删除service 。请注意,D-Bus 通知是异步的,因此可能仍有关于service 的信号等待发送。每当 D-Bus 消息被处理时,这些信号仍将被发出。
删除watchedServices 的任何现有绑定。
如果有任何服务被移除,该函数将返回true
。
[signal]
void QDBusServiceWatcher::serviceOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner)
当该对象检测到与serviceName 服务相关的服务所有权发生变化时,就会发出该信号。oldOwner 参数包含旧的所有者名称,而newOwner 则是新的所有者。oldOwner 和newOwner 都是唯一的连接名称。
请注意,每当serviceName 服务注册或取消注册时,也会发出该信号。如果已注册,oldOwner 将包含空字符串;如果未注册,newOwner 将包含空字符串。
如果您只需要知道服务是否已注册或未注册,而不需要收到所有权变更的通知,那么可以考虑使用特定模式来进行这些操作。如果使用更具体的模式,该类的效率会更高。
另请参阅 serviceRegistered() 和serviceUnregistered()。
[signal]
void QDBusServiceWatcher::serviceRegistered(const QString &serviceName)
当该对象检测到总线上的服务serviceName 可用时,就会发出该信号。
另请参阅 serviceUnregistered() 和serviceOwnerChanged()。
[signal]
void QDBusServiceWatcher::serviceUnregistered(const QString &serviceName)
当该对象检测到服务serviceName 已从总线上取消注册且不再可用时,就会发出该信号。
另请参阅 serviceRegistered() 和serviceOwnerChanged()。
void QDBusServiceWatcher::setConnection(const QDBusConnection &connection)
将此对象所连接的 D-Bus 连接设置为connection 。所有观察到的服务都将转移到此连接。
请注意,QDBusConnection 对象是有引用计数的:当该连接存在时,QDBusServiceWatcher 将保留一个引用。直到引用计数降为零,连接才会关闭,因此这将确保在QDBusServiceWatcher 对象存在期间收到任何通知。
另请参见 connection()。
void QDBusServiceWatcher::setWatchedServices(const QStringList &services)
将被监视的 D-Bus 服务列表设置为services 。
需要注意的是,设置整个列表意味着删除所有先前的服务监视规则并添加新规则。这种操作代价高昂,应尽量避免。如果可以,请使用addWatchedService() 和removeWatchedService() 来操作列表中的条目。
删除watchedServices 的任何现有绑定。
注: 属性watchedServices 的设置函数。
另请参阅 watchedServices()。
QStringList QDBusServiceWatcher::watchedServices() const
返回被监视的 D-Bus 服务列表。
注: 属性 watchedServices 的获取函数。
另请参阅 setWatchedServices().
© 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.