通过本教程,我发现
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”在这里是什么意思?
从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] 删除。
我来说两句