QDBusAbstractInterface 类

QDBusAbstractInterface 类是 Qt D-Bus 绑定的所有 D-Bus 接口的基类,允许访问远程接口。 更多...

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

QDBusConnectionInterfaceQDBusInterface

公共函数

虚拟~QDBusAbstractInterface()
QDBusPendingCallasyncCall(const QString &method, Args &&... args)
QDBusPendingCallasyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)
QDBusMessagecall(const QString &method, Args &&... args)
QDBusMessagecall(QDBus::CallMode mode, const QString &method, Args &&... args)
QDBusMessagecallWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)
boolcallWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
boolcallWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)
QDBusConnectionconnection() const
QStringinterface() const
(since 6.7) boolisInteractiveAuthorizationAllowed() const
boolisValid() const
QDBusErrorlastError() const
QStringpath() const
QStringservice() const
(since 6.7) voidsetInteractiveAuthorizationAllowed(bool enable)
voidsetTimeout(int timeout)
inttimeout() const

详细描述

生成的代码类也派生自 QDBusAbstractInterface,此处描述的所有方法也适用于生成的代码类。除了这些,生成的代码类还提供了远程方法的成员函数,允许进行编译时参数和返回值的正确性检查,以及属性类型匹配和信号参数匹配。

另请参阅 QDBus编译器 以及 QDBusInterface

成员函数文档

[虚函数 noexcept] QDBusAbstractInterface::~QDBusAbstractInterface()

释放此对象资源。

模板 <typename... Args> QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, Args &&... args)

调用此接口上的方法method 并将args作为参数传递给方法。所有args都必须可转换为QVariant

call的参数通过D-Bus作为输入参数传递给远程函数。返回的QDBusPendingCall对象可以用于了解响应信息。

可以使用以下方法

QDBusPendingCall pcall = interface->asyncCall("GetAPIVersion"_L1);
auto watcher = new QDBusPendingCallWatcher(pcall, this);

QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this,
                 [&](QDBusPendingCallWatcher *w) {
    QString value = retrieveValue();
    QDBusPendingReply<int> reply(*w);
    QDBusPendingCall pcall;
    if (reply.argumentAt<0>() >= 14)
        pcall = interface->asyncCall("ProcessWorkUnicode"_L1, value);
    else
        pcall = interface->asyncCall("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());

    w = new QDBusPendingCallWatcher(pcall);
    QObject::connect(w,  &QDBusPendingCallWatcher::finished, this,
                     &Abstract_DBus_Interface::callFinishedSlot);
});

此示例说明如何调用具有0、1和2个参数的函数,并说明了每次传递的不同参数类型(对"ProcessWorkUnicode"的第一次调用将包含一个Unicode字符串,对"ProcessWork"的第二次调用将包含一个字符串和一个字节数组)。有关阻塞(同步)调用的相同示例,请参阅call()。

注意:在Qt 5.14之前,此函数最多只能接受八个(8)参数。

注意:由于实现限制,对本地QDBusServer's的方法调用永远不会异步。

另请参阅 asyncCallWithArgumentList

QDBusPendingCall QDBusAbstractInterface::asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)

在此接口上放置一个调用到由method指定的远程方法,使用args作为参数。此函数返回一个QDBusPendingCall对象,可以用来跟踪响应状态并在其到达后访问其内容。

通常,您应使用asyncCall()放置调用。

注意:由于实现限制,对由应用程序本身注册的对象的方法调用永远不会异步。

注意:此函数是线程安全的。

模板 <typename... Args> QDBusMessage QDBusAbstractInterface::call(const QString &method, Args &&... args)

调用此接口上的方法method 并将args作为参数传递给方法。所有args都必须可转换为QVariant

call的参数通过D-Bus作为输入参数传递给远程函数。输出参数返回在QDBusMessage响应中。如果响应是错误响应,lastError()也将设置为错误消息的内容。

可以使用以下方法

QString value = retrieveValue();
QDBusMessage reply;

QDBusReply<int> api = interface->call("GetAPIVersion"_L1);
if (api >= 14)
  reply = interface->call("ProcessWorkUnicode"_L1, value);
else
  reply = interface->call("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());

此示例说明如何调用具有0、1和2个参数的函数,并说明了每次传递的不同参数类型(对"ProcessWorkUnicode"的第一次调用将包含一个Unicode字符串,对"ProcessWork"的第二次调用将包含一个字符串和一个字节数组)。有关非阻塞(异步)调用的相同示例,请参阅asyncCall()。

注意:在Qt 5.14之前,此函数最多只能接受八个(8)参数。

另请参阅 callWithArgumentList