【问题标题】:What does "in" and "out" mean in arg direction?arg 方向上的“in”和“out”是什么意思?
【发布时间】:2019-11-14 17:12:33
【问题描述】:

this tutorial,我找到了

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”是什么意思?

【问题讨论】:

  • 这似乎是指 QT qdbuscpp2xml 工具输出的 D-Bus Introspection XML。请在提问时提供此类信息,以帮助读者理解您所指的内容。

标签: c++ xml qt


【解决方案1】:

来自D-Bus Tutorial

方法和信号

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

来自D-Bus Specification

[...] 方法的参数通常称为“in”(这意味着在 METHOD_CALL 中发送)或“out”(这意味着在 METHOD_RETURN 中返回)。


上的方向元素可以省略,在这种情况下,它默认为方法调用的“in”和信号的“out”。信号只允许“出”,所以虽然可以指定方向,但没有意义。

direction 属性描述参数是函数的输入,还是返回给调用者的输出。对于信号,只允许输出参数。一个函数可能有多个out参数,你可以看看here的例子。

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

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2016-10-29
    • 2015-06-27
    相关资源
    最近更新 更多