arg方向上的“ in”和“ out”是什么意思?

陈力

通过本教程,我发现

class Chat : public QObject
{
    Q_OBJECT

    Q_CLASSINFO("D-Bus Interface", "demo.Chat")
    Q_PROPERTY( QStringList users READ users)

signals:
    void userAdded(const QString& user);
    void userRemoved(const QString& user);

    void messageSent(const Message &message);

public slots:
    void addUser(const QString &user);
    void removeUser(const QString &user);

    void sendMessage(const Message &message);

public:
    Chat(QObject* parent = 0);
    virtual ~Chat();

    QStringList users() const;

private:
    QStringList m_users;
};

可以产生

......
    <signal name="userRemoved">
      <arg name="user" type="s" direction="out"/>
    </signal>
    <method name="addUser">
      <arg name="user" type="s" direction="in"/>
    </method>
......

“ out”和“ in”在这里是什么意思?

T3 H40

D-Bus教程

方法和信号

每个对象都有成员;两种成员是方法和信号。方法是可以在对象上调用的操作,具有可选的输入(也称为参数或“输入参数”)和输出(即返回值或“输出参数”)。信号从对象广播到对象的任何感兴趣的观察者。信号可能包含数据有效载荷。

根据D-Bus规范

方法的参数通常称为“输入”(暗示在METHOD_CALL中发送)或“输出”(暗示在METHOD_RETURN中返回)。


可以省略<arg>上的direction元素,在这种情况下,方法调用默认为“ in”,信号默认为“ out”。信号仅允许“输出”,因此尽管可以指定方向,但毫无意义。

direction属性描述参数是函数的输入,还是输出将返回给调用者的参数。对于信号,仅允许输出参数。一个函数可能具有多个out参数,您可以在此处查看示例。

在您的特定情况下,userRemoved是通过D-Bus传输新用户的信号,因此user参数是朝外的值。addUser但是,它是一个将通过D-Bus调用并user作为其输入的函数,它是一个向内的值,它将通过D-Bus到达而不是从此对象发送。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章