QDBusAbstractInterface 类
QDBusAbstractInterface 类是 Qt D-Bus 绑定的所有 D-Bus 接口的基类,允许访问远程接口。 更多...
头文件 | #include <QDBusAbstractInterface> |
CMake | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake | QT += dbus |
继承自 | QObject |
继承类 |
公共函数
虚拟 | ~QDBusAbstractInterface() |
QDBusPendingCall | asyncCall(const QString &method, Args &&... args) |
QDBusPendingCall | asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args) |
QDBusMessage | call(const QString &method, Args &&... args) |
QDBusMessage | call(QDBus::CallMode mode, const QString &method, Args &&... args) |
QDBusMessage | callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args) |
bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod) |
bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot) |
QDBusConnection | connection() const |
QString | interface() const |
(since 6.7) bool | isInteractiveAuthorizationAllowed() const |
bool | isValid() const |
QDBusError | lastError() const |
QString | path() const |
QString | service() const |
(since 6.7) void | setInteractiveAuthorizationAllowed(bool enable) |
void | setTimeout(int timeout) |
int | timeout() 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。
> QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &method, Args &&... args)
这是一个重载函数。
调用此接口上的方法method 并将args作为参数传递给方法。所有args都必须可转换为QVariant。
如果 mode 是 NoWaitForReply
,那么该函数在发出调用后立即返回,不等待远程方法的回复。否则,mode 标识在等待回复是否应该激活 Qt 事件循环。
如果此函数要进入 Qt 事件循环以等待回复,它将排除用户输入。在等待期间,它可能会将信号和其他方法调用传递到您的应用程序中。因此,您必须准备好在用 call() 发出调用时处理任何重新进入。
注意:在Qt 5.14之前,此函数最多只能接受八个(8)参数。
另请参阅 callWithArgumentList。
QDBusMessage QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)
使用 args 作为参数,在此接口的指定远程方法上放置调用。此函数返回作为回复收到的消息,它可以是正常的 QDBusMessage::ReplyMessage(表示成功)或 QDBusMessage::ErrorMessage(如果调用失败)。mode 参数指定如何放置此调用。
如果调用成功,lastError() 将被清除;否则,它将包含调用产生的错误。
通常,您应该使用 call() 放置调用。
注意:如果您使用 UseEventLoop
,您的代码必须准备好处理任何重入性:其他方法调用和信号可能在函数返回之前传递,以及其他 Qt 排队信号和事件。
注意:此函数是线程安全的。
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
使用 args 作为参数,在此接口上放置指定 method 的远程方法调用。此函数在队列调用后立即返回。远程函数的回复传递到对象 receiver 上的 returnMethod。如果发生错误,将调用对象 receiver 上的 errorMethod。
如果排队成功,此函数返回 true
。它并不表示执行调用已成功。如果它失败,将调用 errorMethod。如果排队失败,此函数返回 false
并且没有任何槽会被调用。
returnMethod 必须有与其参数类型相对应的参数。它可以选择带有 QDBusMessage 参数的最后一个或唯一参数。errorMethod 必须有一个 QDBusError 参数。
注意:由于实现限制,对由应用程序本身注册的对象的方法调用永远不会异步。
另请参阅QDBusError和QDBusMessage。
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)
这是一个重载函数。
此函数已弃用。请使用重载版本。
在此接口上放置对由method指定的远程方法的调用,使用args作为参数。此函数在排队调用后立即返回。远程函数的响应或它发出的任何错误将被发送到对象receiver上的槽slot。
此函数返回true
,如果排队成功:它并不表示调用成功。如果失败,则槽将带错误消息调用。《a href="qdbusabstractinterface.html#lastError" translate="no">lastError()在此情况下不会被设置。
另请参阅QDBusError和QDBusMessage。
QDBusConnection QDBusAbstractInterface::connection() const
返回与该接口相关联的连接。
QString QDBusAbstractInterface::interface() const
返回该接口的名称。
[since 6.7]
bool QDBusAbstractInterface::isInteractiveAuthorizationAllowed() const
返回是否为异步调用,调用方准备好等待交互授权。
默认为false
。
此函数在Qt 6.7中引入。
另请参阅setInteractiveAuthorizationAllowed()和QDBusMessage::setInteractiveAuthorizationAllowed。
bool QDBusAbstractInterface::isValid() const
如果这是对远程对象的有效的引用,则返回true
。如果在创建此接口时发生错误(例如,如果远程应用程序不存在),则返回false
。
注意:当处理远程对象时,在创建QDBusInterface时,有时无法确定其是否存在。
QDBusError QDBusAbstractInterface::lastError() const
返回上次操作产生的错误,如果没有错误,则返回一个无效的错误。
QString QDBusAbstractInterface::path() const
返回与该接口相关联的对象路径。
QString QDBusAbstractInterface::service() const
返回与该接口相关联的服务名。
[since 6.7]
void QDBusAbstractInterface::setInteractiveAuthorizationAllowed(bool enable)
配置是否为异步调用,调用方准备好等待交互授权。
如果将enable设置为true
,则通过该接口异步调用产生的D-Bus消息将设置ALLOW_INTERACTIVE_AUTHORIZATION
标志。
此标志仅在非特权代码调用更高权限的方法调用并且部署了允许可能的交互式授权的授权框架时才有用。
默认为false
。
此函数在Qt 6.7中引入。
另请参阅isInteractiveAuthorizationAllowed()和QDBusMessage::setInteractiveAuthorization Allowed。
void QDBusAbstractInterface::setTimeout(int timeout)
设置所有未来DBus调用到timeout的毫秒超时时间。-1表示默认DBus超时(通常为25秒)。
另请参阅timeout。
int QDBusAbstractInterface::timeout() const
返回当前毫秒超时值。-1表示默认DBus超时(通常为25秒)。
另请参阅setTimeout。
© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档根据 GNU自由文档许可证第1.3版许可,由自由软件基金会发布。Qt及其相关标志是芬兰及其它国家/地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。