class QDBusContext#

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

摘要#

方法#

注意

本文档可能包含从 C++ 自动转换为 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在错误,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式告诉我们

详细描述#

警告

本节包含从 C++ 自动转换为 Python 的代码片段,可能包含错误。

当一个对象因信号传递或远程方法调用而调用槽时,有时需要知道此发生的上下文。特别是,如果槽需要在稍后再发送回复或需要错误回复,则需要上下文。

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

QDBusContext 通过从使用 registerObject() 导出的对象中继承来使用。以下示例说明了用法

class MyObject(QObject,
                protected QDBusContext

    Q_OBJECT
    conn = QDBusConnection()
    msg = QDBusMessage()
    #...
# protected slots
    def process():
# public slots
    def methodWithError():
    methodWithDelayedReply = QString()

def methodWithError(self):

    sendErrorReply(QDBusError.NotSupported,
                   "The method call 'methodWithError()' is not supported")

def methodWithDelayedReply(self):

    conn = connection()
    msg = message()
    setDelayedReply(True)
    QMetaObject::invokeMethod(self.process, Qt::QueuedConnection)
    return QString()

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

注意:不要同时继承 QDBusContextQDBusAbstractAdaptorQDBusContext 应出现在真实对象中,而不是适配器中。如果适配器代码需要确定上下文,请使用公共继承并通过 QObject::parent() 访问函数。

__init__()#

构造一个空的 QDBusContext

calledFromDBus()#
返回类型::

bool

如果我们在处理 D-Bus 调用,则返回 true。如果这个函数返回 true,则在本类的其余函数都是可用的。

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

connection()#
返回类型::

QDBusConnection

返回接收此调用连接。

isDelayedReply()#
返回类型::

bool

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

另请参阅

setDelayedReply()

message()#
返回类型::

QDBusMessage

返回生成此调用的消息。

sendErrorReply(type[, msg=""])#
参数:

这是一个重载函数。

发送一个错误类型作为回复给调用者。可选的 msg 参数是解释失败的可读文本。

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

sendErrorReply(name[, msg=""])
参数:
  • name – 字符串

  • msg – 字符串

发送一个错误名称作为回复给调用者。可选的 msg 参数是解释失败的可读文本。

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

setDelayedReply(enable)#
参数:

enable – 布尔值

设置这个调用是否有延迟回复。

如果 enable 是 false,Qt D-Bus 将会在调用槽返回后立即自动向调用者生成一个回复,如果需要的话。

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

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

另请参阅

isDelayedReply()