QDBusPendingCallWatcher 类
QDBusPendingCallWatcher 类提供了一个方便的方式等待异步回复。 更多...
头文件 | #include <QDBusPendingCallWatcher> |
CMake | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake | QT += dbus |
继承自 | QObject 和 QDBusPendingCall |
公共函数
QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr) | |
virtual | ~QDBusPendingCallWatcher() |
bool | isFinished() const |
void | waitForFinished() |
信号
void | finished(QDBusPendingCallWatcher *self = nullptr) |
详细描述
QDBusPendingCallWatcher 在收到回复时将发出 finished() 信号。
通常使用的方式如下所示
QDBusPendingCall async = iface->asyncCall("RemoteMethod", value1, value2); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, &DBus_PendingCall_Interface::callFinishedSlot);
注意,不需要保留原始的 QDBusPendingCall 对象,因为 QDBusPendingCallWatcher 也继承自该类。
以上代码连接的槽可以类似于以下内容
void DBus_PendingCall_Interface::callFinishedSlot(QDBusPendingCallWatcher *call) { QDBusPendingReply<QString, QByteArray> reply = *call; if (reply.isError()) { showError(); } else { QString text = reply.argumentAt<0>(); QByteArray data = reply.argumentAt<1>(); showReply(text, data); } call->deleteLater(); }
注意使用 QDBusPendingReply 来验证回复中参数的类型。如果回复中没有恰好两个参数(一个字符串和一个 QByteArray),QDBusPendingReply::isError() 将返回 true。
另请参阅QDBusPendingReply。
成员函数文档
[显式]
QDBusPendingCallWatcher::QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr)
创建一个 QDBusPendingCallWatcher 对象来监视异步挂起的调用
[虚函数 noexcept]
QDBusPendingCallWatcher::~QDBusPendingCallWatcher()
销毁此对象。如果此 QDBusPendingCallWatcher 对象是该未完成挂起调用的最后一个引用,则将取消该调用。
[信号]
void QDBusPendingCallWatcher::finished(QDBusPendingCallWatcher *self = nullptr)
当挂起的调用完成且其回复可用时,会发出此信号。"self"参数是指向对象的指针,传递它是为了方便槽访问属性并确定回复的内容。
bool QDBusPendingCallWatcher::isFinished() const
如果挂起的调用已完成处理且已收到回复,则返回 true
。
注意,只有当你调用 waitForFinished() 或发生外部D-Bus事件时(通常这意味着你返回到事件循环执行),此函数才会改变状态。
另请参阅QDBusPendingReply::isFinished。
void QDBusPendingCallWatcher::waitForFinished()
挂起调用线程的执行,直到收到并处理回复。在此函数返回后,isFinished() 应返回 true
,表示回复的内容可以处理。
© 2024 Qt公司 Ltd。 所包含的文档贡献是相应所有者的版权。本提供的文档根据自由软件基金会发布的自由文档许可证版本1.3的条款 licensed。Qt及其相关标志是在芬兰和/或世界其他地区的商标,由 Qt公司 Ltd. 所拥有。所有其他商标均为其各自所有者的财产。