QDBusContext 类

QDBusContext 类允许槽确定调用的 D-Bus 上下文。 更多...

头文件 #include <QDBusContext>
CMakefind_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmakeQT += dbus

公共函数

QDBusContext()
~QDBusContext()
boolcalledFromDBus() const
QDBusConnectionconnection() const
boolisDelayedReply() const
const QDBusMessage &message() const
voidsendErrorReply(const QString &name, const QString &msg = QString()) const
voidsendErrorReply(QDBusError::ErrorType type, const QString &msg = QString()) const
voidsetDelayedReply(bool enable) const

详细说明

当一个槽由于信号传递或远程方法调用在一个对象中被调用时,有时需要知道该事件发生的上下文。特别是,如果槽确定它想要在稍后的机会发送回复,或者它想要回复错误,则需要上下文。

QDBusContext 类是访问上下文的替代方法,不涉及修改由 Qt D-Bus XML 编译器(qdbusxml2cpp)生成的代码。

QDBusContext 通过从 QDBusConnection 的注册对象使用 QDBusConnection::registerObject() 方法导出对象而被使用。以下示例说明了使用方法

class MyObject: public QObject,
                protected QDBusContext
{
    Q_OBJECT

    QDBusConnection conn;
    QDBusMessage msg;

    //...

protected slots:
    void process();
public slots:
    void methodWithError();
    QString methodWithDelayedReply();
};

void MyObject::methodWithError()
{
    sendErrorReply(QDBusError::NotSupported,
                   "The method call 'methodWithError()' is not supported");
}

QString MyObject::methodWithDelayedReply()
{
    conn = connection();
    msg = message();
    setDelayedReply(true);
    QMetaObject::invokeMethod(this, &MyObject::process, Qt::QueuedConnection);
    return QString();
}

示例说明了两种典型用途,即发送错误回复和延迟回复。

注意:同时不得派生 QDBusContext 和 QDBusAbstractAdaptor。QDBusContext 应出现在真实对象中,而不是适配器中。如果从适配器代码中确定上下文是必要的,则使用公共继承并通过 QObject::parent() 方法访问函数。

成员函数说明

QDBusContext::QDBusContext()

构造一个空的 QDBusContext。

[noexcept] QDBusContext::~QDBusContext()

一个空的析构函数。

bool QDBusContext::calledFromDBus() const

如果正在处理 D-Bus 调用,返回 true。如果该函数返回 true,则此类中的其余函数可用。

在此函数返回 false 时访问这些函数是未定义的,可能导致崩溃。

QDBusConnection QDBusContext::connection() const

返回接收此调用的连接。

bool QDBusContext::isDelayedReply() const

如果此调用将具有延迟回复,则返回 true

另请参阅 setDelayedReply

const QDBusMessage &QDBusContext::message() const

返回生成此调用的消息。

void QDBusContext::sendErrorReply(const QString &name, const QString &msg = QString()) const

向调用者发送错误 name 作为回复。可选的 msg 参数是一个可读性好的文本,用于解释失败原因。

如果发送了错误,Qt D-Bus 将忽略返回值和任何输出参数。

void QDBusContext::sendErrorReply(QDBusError::ErrorType type, const QString &msg = QString()) const

这是一个重载函数。

向调用者发送错误 type 作为回复。可选的 msg 参数是一个可读性好的文本,用于解释失败原因。

如果发送了错误,Qt D-Bus 将忽略返回值和任何输出参数。

void QDBusContext::setDelayedReply(bool enable) const

设置此调用是否具有延迟回复。

如果 enable 为 false,Qt D-Bus 将在调用槽返回时自动生成对调用者的回复(如果需要)。

如果 enable 为 true,Qt D-Bus 不会生成自动回复。它还将忽略槽的返回值和任何输出参数。相反,被调用的对象负责存储传入的消息并在稍后发送一个回复或错误。

未能发送回复将导致 D-Bus 自动生成超时错误。

另请参阅 isDelayedReply

© 2024 Qt 公司。文档贡献包含在内的版权为各自的拥有者所有。本文件中的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt和相应的商标是芬兰的Qt公司及其全球子公司和关联公司的注册商标。所有其他商标均为各自所有者的财产。