本页内容

QDBusMessage Class

QDBusMessage 类表示通过 D-Bus 总线发送或接收的一条消息。更多内容...

头文件: #include <QDBusMessage>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus

公共类型

enum MessageType { MethodCallMessage, SignalMessage, ReplyMessage, ErrorMessage, InvalidMessage }

公共函数

QDBusMessage()
QDBusMessage(const QDBusMessage &other)
(since 6.11) QDBusMessage(QDBusMessage &&other)
~QDBusMessage()
QList<QVariant> arguments() const
bool autoStartService() const
QDBusMessage createErrorReply(const QDBusError &error) const
QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const
QDBusMessage createErrorReply(const QString &name, const QString &msg) const
QDBusMessage createReply(const QList<QVariant> &arguments = QList<QVariant>()) const
QDBusMessage createReply(const QVariant &argument) const
QString errorMessage() const
QString errorName() const
QString interface() const
bool isDelayedReply() const
bool isInteractiveAuthorizationAllowed() const
bool isReplyRequired() const
QString member() const
QString path() const
QString service() const
void setArguments(const QList<QVariant> &arguments)
void setAutoStartService(bool enable)
void setDelayedReply(bool enable) const
void setInteractiveAuthorizationAllowed(bool enable)
QString signature() const
void swap(QDBusMessage &other)
QDBusMessage::MessageType type() const
QDBusMessage &operator<<(const QVariant &arg)
QDBusMessage &operator=(QDBusMessage &&other)
QDBusMessage &operator=(const QDBusMessage &other)

静态公共成员

QDBusMessage createError(const QDBusError &error)
QDBusMessage createError(QDBusError::ErrorType type, const QString &msg)
QDBusMessage createError(const QString &name, const QString &msg)
QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method)
QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name)
QDBusMessage createTargetedSignal(const QString &service, const QString &path, const QString &interface, const QString &name)

详细说明

该对象可以表示总线上可能出现的四种不同类型消息(MessageType )中的任何一种:

  • 方法调用
  • 方法返回值
  • 信号发出
  • 错误代码

此类对象可通过静态函数createError()、createMethodCall() 和createSignal() 创建。请使用QDBusConnection::send() 函数发送消息。

成员类型文档

enum QDBusMessage::MessageType

可能的消息类型:

常量值描述
QDBusMessage::MethodCallMessage1表示传出或传入方法调用的消息
QDBusMessage::SignalMessage4表示发出或接收信号的消息
QDBusMessage::ReplyMessage2表示方法调用返回值的消息
QDBusMessage::ErrorMessage3表示方法调用响应中出现错误情况的消息
QDBusMessage::InvalidMessage0无效消息:从 D-Bus 接收的消息绝不会被设置为该状态

成员函数文档

QDBusMessage::QDBusMessage()

构建一个空的、无效的 QDBusMessage 对象。

另请参阅 createError()、createMethodCall() 和createSignal()。

QDBusMessage::QDBusMessage(const QDBusMessage &other)

创建由 `other` 指定的对象的副本。

注意:QDBusMessage 对象是共享的。对副本所做的修改也会影响原始对象。更多信息请参阅setDelayedReply()。

[noexcept, since 6.11] QDBusMessage::QDBusMessage(QDBusMessage &&other)

将other 移动到此对象中。

注意: 被移动的对象 other 将处于部分初始化状态,在此状态下,唯一有效的操作是销毁和赋值。

该函数于 Qt 6.11 中引入。

[noexcept] QDBusMessage::~QDBusMessage()

销毁该对象,并释放其占用的所有资源。

QList<QVariant> QDBusMessage::arguments() const

返回即将发送给 D-Bus 或已从 D-Bus 接收到的参数列表。

另请参阅 setArguments()。

bool QDBusMessage::autoStartService() const

返回由setAutoStartService() 设置的自动启动标志。默认情况下,该标志为 true,这意味着如果服务尚未运行,Qt D-Bus 将自动启动该服务。

另请参阅 setAutoStartService()。

[static] QDBusMessage QDBusMessage::createError(const QDBusError &error)

构建一个新的 DBus 消息,该消息表示给定的error 。

[static] QDBusMessage QDBusMessage::createError(QDBusError::ErrorType type, const QString &msg)

使用消息msg 为错误类型type 构建一条新的DBus消息。返回该DBus消息。

[static] QDBusMessage QDBusMessage::createError(const QString &name, const QString &msg)

根据给定的name 和msg ,构建一个表示错误的新DBus消息。

QDBusMessage QDBusMessage::createErrorReply(const QDBusError &error) const

根据给定的error 对象,构建一个表示错误回复消息的新DBus消息。

QDBusMessage QDBusMessage::createErrorReply(QDBusError::ErrorType type, const QString &msg) const

使用消息msg 为错误类型type 构建一条新的DBus响应消息。返回该DBus消息。

QDBusMessage QDBusMessage::createErrorReply(const QString &name, const QString &msg) const

根据给定的name 和msg ,构建一个表示错误回复消息的新DBus消息。

[static] QDBusMessage QDBusMessage::createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method)

构建一个表示方法调用的新 DBus 消息。方法调用总是会指定其目标地址(service 、path 、interface 和method )。

如果方法名是唯一的,DBus 总线允许在不指定目标接口的情况下调用给定远程对象上的方法。但是,如果远程对象上的两个接口导出了相同的方法名,则结果未定义(可能调用其中一个,也可能返回错误)。

在点对点(peer-to-peer)环境中使用 DBus 时(即不在总线上),service 参数是可选的。

QDBusInterface 类为同步方法调用提供了一种更简单的抽象。

该函数返回一个QDBusMessage 对象,该对象可通过QDBusConnection::call() 进行发送。

QDBusMessage QDBusMessage::createReply(const QList<QVariant> &arguments = QList<QVariant>()) const

根据给定的arguments ,构建一个表示回复的新DBus消息。

QDBusMessage QDBusMessage::createReply(const QVariant &argument) const

根据给定的argument ,构建一个表示回复的新DBus消息。

[static] QDBusMessage QDBusMessage::createSignal(const QString &path, const QString &interface, const QString &name)

根据给定的path 、interface 和name 构建一条新的DBus消息,表示信号的发出。

一个 DBus 信号由某个应用程序发出,并被所有正在监听该接口上该信号的应用程序接收。

返回的QDBusMessage 对象可通过QDBusConnection::send()函数发送。

[static] QDBusMessage QDBusMessage::createTargetedSignal(const QString &service, const QString &path, const QString &interface, const QString &name)

根据给定的path 、interface 和name 构建一条新的DBus消息,该消息表示向特定目标发送信号。

DBus信号由某个应用程序发出,且仅由拥有该目标service 名称的应用程序接收。

返回的QDBusMessage 对象可通过QDBusConnection::send() 函数进行发送。

QString QDBusMessage::errorMessage() const

返回与收到的错误相关联的易于理解的错误信息。

QString QDBusMessage::errorName() const

返回收到的错误名称。

QString QDBusMessage::interface() const

返回正在被调用的方法的接口(在方法调用情况下),或返回信号的接口。

bool QDBusMessage::isDelayedReply() const

返回由setDelayedReply()设置的延迟回复标志。默认情况下,该标志为false,这意味着Qt D-Bus 会在必要时生成自动回复。

bool QDBusMessage::isInteractiveAuthorizationAllowed() const

返回该消息是否设置了ALLOW_INTERACTIVE_AUTHORIZATION 标志。

另请参阅 setInteractiveAuthorizationAllowed() 和QDBusAbstractInterface::isInteractiveAuthorizationAllowed()。

bool QDBusMessage::isReplyRequired() const

返回一个标志,用于指示该消息是否应收到回复。此标志仅对method call messages 有效:其他类型的消息无法收到回复,因此对于这些消息,该函数将始终返回false。

QString QDBusMessage::member() const

返回已触发的信号名称或已调用的方法名称。

QString QDBusMessage::path() const

返回该消息的接收对象(方法调用时)或发送对象(信号时)的路径。

QString QDBusMessage::service() const

返回服务名称或远程方法调用的总线地址。

void QDBusMessage::setArguments(const QList<QVariant> &arguments)

设置将通过 D-Bus 发送到arguments 的参数。这些参数将作为方法调用的参数或信号中的参数。

请注意,在arguments 中,QVariantMap 的QVariant 值若无效则不被允许。

另请参阅 arguments()。

void QDBusMessage::setAutoStartService(bool enable)

将自动启动标志设置为enable 。该标志仅对方法调用消息有效,它会指示 D-Bus 服务器自动启动负责该服务名称的服务,或者不自动启动该服务。

默认情况下,此标志为 true,即服务会自动启动。这意味着:

当此方法调用所发送的目标服务已运行时,该方法调用将发送至该服务。 如果该服务尚未运行,则会请求 D-Bus 守护进程自动启动分配给该服务名称的服务。此操作由放置在 D-Bus 服务器已知目录中的 .service 文件处理。这些文件各自包含一个服务名称以及在请求该服务名称时应执行的程序路径。

另请参阅 autoStartService()。

void QDBusMessage::setDelayedReply(bool enable) const

用于设置是否稍后回复该消息(若enable 为真),或是由Qt D-Bus 生成自动回复(若enable 为假)。

在 D-Bus 中,所有方法调用都必须向调用者返回响应,除非调用者明确指定否则(参见isReplyRequired())。QtDBus 会为被调用的任何槽自动生成此类响应,但同时也允许槽指定是否在函数处理完成后,由其自行负责在稍后时间发送响应。

另请参阅 isDelayedReply() 和“延迟响应”。

void QDBusMessage::setInteractiveAuthorizationAllowed(bool enable)

启用或禁用消息中的ALLOW_INTERACTIVE_AUTHORIZATION 标志。

该标志仅对方法调用消息(QDBusMessage::MethodCallMessage )有效。如果enable 被设置为true ,则该标志向被调用方表明,方法的调用方已准备好在实际处理方法之前等待交互式授权(例如通过Polkit)的完成。

如果将 `enable ` 设置为 `false`,则该标志不会被设置,这意味着预期对方将以非交互式方式并迅速做出任何授权决定。这是默认行为。

org.freedesktop.DBus.Error.InteractiveAuthorizationRequired 错误表示授权失败,但如果已设置此标志,则本可能成功。

另请参阅 isInteractiveAuthorizationAllowed() 和QDBusAbstractInterface::setInteractiveAuthorizationAllowed()。

QString QDBusMessage::signature() const

返回已接收信号的签名,或方法调用的输出参数的签名。

[noexcept] void QDBusMessage::swap(QDBusMessage &other)

将此消息与other 进行交换。此操作速度极快,且绝不会失败。

QDBusMessage::MessageType QDBusMessage::type() const

返回消息类型。

QDBusMessage &QDBusMessage::operator<<(const QVariant &arg)

将参数arg 附加到方法调用或信号发送时通过 D-Bus 发送的参数列表中。

[noexcept] QDBusMessage &QDBusMessage::operator=(QDBusMessage &&other)

将other 移动并赋值给该对象。

注意: 被移动的对象 other 将处于部分初始化状态,在此状态下,唯一有效的操作是销毁和赋予新值。

QDBusMessage &QDBusMessage::operator=(const QDBusMessage &other)

复制由 `other` 指定的对象的内容。

注意:QDBusMessage 对象是共享的。对副本所做的修改也会影响原始对象。有关更多信息,请参阅setDelayedReply()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.