QDBusPendingCallWatcher 类

QDBusPendingCallWatcher 类提供了一个方便的方式等待异步回复。 更多...

头文件 #include <QDBusPendingCallWatcher>
CMakefind_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmakeQT += dbus
继承自 QObjectQDBusPendingCall

公共函数

QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr)
virtual~QDBusPendingCallWatcher()
boolisFinished() const
voidwaitForFinished()

信号

voidfinished(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,表示回复的内容可以处理。

另请参阅QDBusPendingReply::waitForFinished

© 2024 Qt公司 Ltd。 所包含的文档贡献是相应所有者的版权。本提供的文档根据自由软件基金会发布的自由文档许可证版本1.3的条款 licensed。Qt及其相关标志是在芬兰和/或世界其他地区的商标,由 Qt公司 Ltd. 所拥有。所有其他商标均为其各自所有者的财产。