{"id":220687,"date":"2014-04-24T15:16:03","date_gmt":"2014-04-24T11:16:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=220687"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=220687","title":{"rendered":"<span class=\"post_title\">\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 Qt \u043f\u043e D-Bus<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/4bd\/72e\/04f\/4bd72e04f0248ce3ea2a17ae5c2f0dce.png\" alt=\"image\" align=\"left\"\/>\u041d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e D-Bus \u0432 Qt (<a href=\"http:\/\/habrahabr.ru\/post\/185212\/\">\u0440\u0430\u0437<\/a>) \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b (<a href=\"http:\/\/habrahabr.ru\/post\/185950\/\">\u0434\u0432\u0430<\/a>). \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0435\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0443\u0442\u0438.<br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0438\u0434 \u043f\u0430\u043c\u044f\u0442\u043a\u0438, \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0432\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432, \u0438 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u0433.<br \/>  <sub>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0438\u0437\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434 Qt 4.7(\u0421\u043f\u0430\u0441\u0438\u0431\u043e Squeeze \u0437\u0430 \u044d\u0442\u043e&#8230;), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438.<\/sub><br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0432 <a href=\"http:\/\/qt-project.org\/doc\/qt-4.7\/qdbustypesystem.html\">\u0434\u043e\u043a\u0435<\/a>. \u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e D-Bus \u0442\u0438\u043f QVariant (<a href=\"http:\/\/qt-project.org\/doc\/qt-4.7\/qdbusvariant.html#id-5c08b25d-c002-4f3f-ae75-35668a5a052c\">QDBusVariant<\/a>). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 QVariant \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u2014 \u043e\u0442 QRect \u0434\u043e QVariantList \u0438 QVariantMap (\u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e). \u0415\u0441\u0442\u044c \u0441\u043e\u0431\u043b\u0430\u0437\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044f \u0438\u0445 \u0432 QVariant. \u041b\u0438\u0447\u043d\u043e \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0431\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u2014 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u043b\u044f \u043d\u0435\u0451 QVariant. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0448\u0438\u0431\u043a\u0430\u043c \u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443.<\/p>\n<h4>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b<\/h4>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0438\u0448\u0435\u043c \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.<br \/>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0438\u043f \u0431\u0443\u0434\u0435\u0442 Money  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[Money]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">struct Money {     int summ;     QString type;      Money()         : summ(0)         , type()     {} }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432:<br \/>  <code>Q_DECLARE_METATYPE(Money)<\/code><br \/>  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0438\u043f\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 <br \/>  <code>    qRegisterMetaType&lt;Money&gt;(&quot;Money&quot;);     qDBusRegisterMetaType&lt;Money&gt;();<\/code><br \/>  \u0414\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e D-Bus \u0442\u0438\u043f\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0435\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0438 \u0441\u0431\u043e\u0440\u0430 \u043d\u0430 <a href=\"http:\/\/qt-project.org\/doc\/qt-4.7\/qdbustypesystem.html\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b <\/a>(marshalling &#038; demarshalling).  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">marshalling &amp; demarshalling<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">friend QDBusArgument& operator &lt;&lt;(QDBusArgument& argument, const Money& arg) {     argument.beginStructure();     argument &lt;&lt; arg.summ;     argument &lt;&lt; arg.type;     argument.endStructure();      return argument; }  friend const QDBusArgument& operator &gt;&gt;(const QDBusArgument& argument, Money& arg) {     argument.beginStructure();     argument &gt;&gt; arg.summ;     argument &gt;&gt; arg.type;     argument.endStructure();      return argument; } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0442\u0430\u043a \u0441\u043a\u0443\u0447\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u0430\u0439\u043b\u044b \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[types.h]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;QString&gt; #include &lt;QDateTime&gt; #include &lt;QMap&gt; #include &lt;QMetaType&gt; #include &lt;QtDBus&gt;  \/\/\u0418\u043c\u044f \u0438 \u043f\u0443\u0442\u044c D-Bus \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 namespace dbus {     static QString serviceName()     {             return &quot;org.student.interface&quot;;     }     static QString servicePath()     {             return &quot;\/org\/student\/interface&quot;;     } }  struct Money {     int summ;     QString type;      Money()         : summ(0)         , type()     {}      friend QDBusArgument &operator&lt;&lt;(QDBusArgument &argument, const Money &arg);     friend const QDBusArgument &operator&gt;&gt;(const QDBusArgument &argument, Money &arg); }; Q_DECLARE_METATYPE(Money)  struct Letter {     Money summ;     QString text;     QDateTime letterDate;      Letter()         : summ()         , text()         , letterDate()     {}      friend QDBusArgument &operator&lt;&lt;(QDBusArgument &argument, const Letter &arg);     friend const QDBusArgument &operator&gt;&gt;(const QDBusArgument &argument, Letter &arg); }; Q_DECLARE_METATYPE(Letter)  \/\/\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u0442\u0438\u043f\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0438\u0441\u0435\u043c typedef QList&lt;QVariant&gt; Stuff;  Q_DECLARE_METATYPE(Stuff)  struct Parcel {     Stuff someFood;     Letter letter;      Parcel()         : someFood()         , letter()     {}      friend QDBusArgument &operator&lt;&lt;(QDBusArgument &argument, const Parcel &arg);     friend const QDBusArgument &operator&gt;&gt;(const QDBusArgument &argument, Parcel &arg); };  Q_DECLARE_METATYPE(Parcel) <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[types.cpp]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;types.h&quot;  #include &lt;QMetaType&gt; #include &lt;QtDBus&gt;  \/\/\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f  \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 static struct RegisterTypes {     RegisterTypes()     {         qRegisterMetaType&lt;Money&gt;(&quot;Money&quot;);         qDBusRegisterMetaType&lt;Money&gt;();          qRegisterMetaType&lt;Letter&gt;(&quot;Letter&quot;);         qDBusRegisterMetaType&lt;Letter&gt;();          qRegisterMetaType&lt;Stuff&gt;(&quot;Stuff&quot;);         qDBusRegisterMetaType&lt;Stuff&gt;();          qRegisterMetaType&lt;Parcel&gt;(&quot;Parcel&quot;);         qDBusRegisterMetaType&lt;Parcel&gt;();     } } RegisterTypes;  \/\/------------------------ QDBusArgument& operator &lt;&lt;(QDBusArgument& argument, const Money& arg) {     argument.beginStructure();     argument &lt;&lt; arg.summ;     argument &lt;&lt; arg.type;     argument.endStructure();      return argument; }  const QDBusArgument& operator &gt;&gt;(const QDBusArgument& argument, Money& arg) {     argument.beginStructure();     argument &gt;&gt; arg.summ;     argument &gt;&gt; arg.type;     argument.endStructure();      return argument; }   \/\/------------------------ QDBusArgument& operator &lt;&lt;(QDBusArgument& argument, const Letter& arg) {     argument.beginStructure();     argument &lt;&lt; arg.summ;     argument &lt;&lt; arg.text;     argument &lt;&lt; arg.letterDate;     argument.endStructure();      return argument; }  const QDBusArgument& operator &gt;&gt;(const QDBusArgument& argument, Letter& arg) {     argument.beginStructure();     argument &gt;&gt; arg.summ;     argument &gt;&gt; arg.text;     argument &gt;&gt; arg.letterDate;     argument.endStructure();      return argument; }  \/\/------------------------ QDBusArgument& operator &lt;&lt;(QDBusArgument& argument, const Parcel& arg) {     argument.beginStructure();     argument &lt;&lt; arg.someFood;     argument &lt;&lt; arg.letter;     argument.endStructure();      return argument; }  const QDBusArgument& operator &gt;&gt;(const QDBusArgument& argument, Parcel& arg) {     argument.beginStructure();     argument &gt;&gt; arg.someFood;     argument &gt;&gt; arg.letter;     argument.endStructure();      return argument; } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c QList \u0438 \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u0448\u0430\u043b\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u043c\u0430\u0440\u0448\u0430\u043b\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/27d\/882\/43d\/27d88243d140d55b2bb22f2184a008e9.png\" align=\"right\"\/><\/p>\n<h4>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c<\/h4>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 Qt \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e D-Bus. \u041e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u042f \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u0438 \u043c\u043d\u0435 \u043b\u0435\u043d\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 QDBus \u0430\u0434\u0430\u043f\u0442\u0435\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 D-Bus, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0442\u043c\u0435\u0447\u0443 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c Q_SCRIPTABLE.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[student.h]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;QObject&gt; #include &quot;..\/lib\/types.h&quot;  class Student : public QObject {     Q_OBJECT     Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.student.interface&quot;)  public:     Student(QObject *parent = 0);     ~Student();  signals:     Q_SCRIPTABLE Q_NOREPLY void needHelp(Letter reason);     void parcelRecived(QString parcelDescription);  public slots:     Q_SCRIPTABLE void reciveParcel(Parcel parcelFromParents);     void sendLetterToParents(QString letterText);  private:     void registerService(); }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0422\u0435\u0433 Q_NOREPLY \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442, \u0447\u0442\u043e D-Bus \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0436\u0434\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u043c\u0435\u0442\u043e\u0434\u0430.<br \/>  \u0414\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 Q_SCRIPTABLE \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void Student::registerService() {     QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, dbus::serviceName());      if (!connection.isConnected())             qDebug()&lt;&lt;(QString(&quot;DBus connect false&quot;));     else             qDebug()&lt;&lt;(QString(&quot;DBus connect is successfully&quot;));      if (!connection.registerObject(dbus::servicePath(), this, QDBusConnection::ExportScriptableContents))     {             qDebug()&lt;&lt;(QString(&quot;DBus register object false. Error: %1&quot;).arg(connection.lastError().message()));     }     else             qDebug()&lt;&lt;(QString(&quot;DBus register object successfully&quot;));      if (!connection.registerService(dbus::serviceName()))     {             qDebug()&lt;&lt;(QString(&quot;DBus register service false. Error: %1&quot;).arg(connection.lastError().message()));     }     else             qDebug()&lt;&lt;(QString(&quot;DBus register service successfully&quot;)); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e cpp \u0444\u0430\u0439\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[student.cpp]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;student.h&quot; #include &lt;QDBusConnection&gt; #include &lt;QDebug&gt; #include &lt;QDBusError&gt;  Student::Student(QObject *parent) :     QObject(parent) {     registerService(); } Student::~Student() { } void Student::reciveParcel(Parcel parcelFromParents) {     QString letterText = parcelFromParents.letter.text;     letterText.append(QString(&quot;\\n Money: %1 %2&quot;).arg(parcelFromParents.letter.summ.summ).arg(parcelFromParents.letter.summ.type));     Stuff sendedStuff = parcelFromParents.someFood;     QString stuffText;     foreach(QVariant food, sendedStuff)     {             stuffText.append(QString(&quot;Stuff: %1\\n&quot;).arg(food.toString()));     }      QString parcelDescription;     parcelDescription.append(letterText);     parcelDescription.append(&quot;\\n&quot;);     parcelDescription.append(stuffText);     emit parcelRecived(parcelDescription); }  void Student::sendLetterToParents(QString letterText) {     Letter letterToParents;     letterToParents.text = letterText;     letterToParents.letterDate = QDateTime::currentDateTime();     emit needHelp(letterToParents); }  void Student::registerService() {     QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, dbus::serviceName());      if (!connection.isConnected())             qDebug()&lt;&lt;(QString(&quot;DBus connect false&quot;));     else             qDebug()&lt;&lt;(QString(&quot;DBus connect is successfully&quot;));      if (!connection.registerObject(dbus::servicePath(), this, QDBusConnection::ExportScriptableContents))     {             qDebug()&lt;&lt;(QString(&quot;DBus register object false. Error: %1&quot;).arg(connection.lastError().message()));     }     else             qDebug()&lt;&lt;(QString(&quot;DBus register object successfully&quot;));      if (!connection.registerService(dbus::serviceName()))     {             qDebug()&lt;&lt;(QString(&quot;DBus register service false. Error: %1&quot;).arg(connection.lastError().message()));     }     else             qDebug()&lt;&lt;(QString(&quot;DBus register service successfully&quot;)); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e D-Bus\u2019\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<br \/>  \u0414\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c QDBusConnection::send:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u0412\u044b\u0437\u043e\u0432 D-Bus \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u0435\u0437 \u043e\u0442\u0432\u0435\u0442\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const QString studentMethod = &quot;reciveParcel&quot;; QDBusMessage sendParcel = QDBusMessage::createMethodCall(dbus::serviceName(), dbus::servicePath(), &quot;&quot;, studentMethod);  QList&lt;QVariant&gt; arg; arg.append(qVariantFromValue(parentsParcel));  sendParcel.setArguments(arg);  if ( !QDBusConnection::sessionBus().send(sendParcel) ) {     qDebug()&lt;&lt;QString(&quot;D-bus %1 calling error: %2&quot;).arg(studentMethod).arg(QDBusConnection::sessionBus().lastError().message()); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041c\u0435\u0442\u043e\u0434 qVariantFromValue \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0433\u0438\u0438, void \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0438\u043f, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 QVariant. \u041e\u0431\u0440\u0430\u0442\u043d\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0448\u0430\u0431\u043b\u043e\u043d \u043c\u0435\u0442\u043e\u0434\u0430 QVariant::value \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 qvariant_cast.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0432\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b QDBusConnection \u2014 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e call \u0438 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e callWithCallback, asyncCall.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 D-Bus \u043c\u0435\u0442\u043e\u0434\u0430 \u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const QString studentMethod = &quot;reciveParcel&quot;; QDBusMessage sendParcel = QDBusMessage::createMethodCall(dbus::serviceName(), dbus::servicePath(), &quot;&quot;, studentMethod);  QList&lt;QVariant&gt; arg; arg.append(qVariantFromValue(parentsParcel));  sendParcel.setArguments(arg);  int timeout = 25; \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c - 25 \u0441\u0435\u043a\u0443\u043d\u0434 QDBusReply&lt;int&gt; reply = QDBusConnection::sessionBus().call(sendParcel, QDBus::Block, timeout); \/\/QDBus::Block \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439(event loop) \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430  if (!reply.isValid()) {     qDebug()&lt;&lt;QString(&quot;D-bus %1 calling error: %2&quot;).arg(studentMethod).arg(QDBusConnection::sessionBus().lastError().message()); } int returnedValue = reply.value(); <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 D-Bus \u043c\u0435\u0442\u043e\u0434\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">const QString studentMethod = &quot;reciveParcel&quot;; QDBusMessage sendParcel = QDBusMessage::createMethodCall(dbus::serviceName(), dbus::servicePath(), &quot;&quot;, studentMethod);  QList&lt;QVariant&gt; arg; arg.append(qVariantFromValue(parentsParcel));  sendParcel.setArguments(arg);  int timeout = 25; \/\/\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c - 25 \u0441\u0435\u043a\u0443\u043d\u0434 bool isCalled = QDBusConnection::sessionBus().callWithCallback(sendParcel, this, SLOT(standartSlot(int)), SLOT(errorHandlerSlot(const QDBusMessage&)), timeout)  if (!isCalled) {     qDebug()&lt;&lt;QString(&quot;D-bus %1 calling error: %2&quot;).arg(studentMethod).arg(QDBusConnection::sessionBus().lastError().message()); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 QDBusAbstractInterface, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 QDBusMessage.<br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043c \u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043c send:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">QDBusMessage msg = QDBusMessage::createSignal(dbus::servicePath(), dbus::serviceName(), &quot;someSignal&quot;); msg &lt;&lt; signalArgument; QDBusConnection::sessionBus().send(msg); <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043a\u043b\u0430\u0441\u0441 Student.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[parents.h]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;QObject&gt; #include &quot;..\/lib\/types.h&quot;  class Parents : public QObject {     Q_OBJECT public:     Parents(QObject *parent = 0);     ~Parents();  private slots:     void reciveLetter(const Letter letterFromStudent);  private:     void connectToDBusSignal();     void sendHelpToChild(const Letter letterFromStudent) const;     void sendParcel(const Parcel parentsParcel) const;     Letter writeLetter(const Letter letterFromStudent) const;     Stuff poskrestiPoSusekam() const; }; <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[parents.cpp]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &quot;parents.h&quot;  #include &lt;QDBusConnection&gt; #include &lt;QDebug&gt;  Parents::Parents(QObject *parent) :     QObject(parent) {     connectToDBusSignal(); }  Parents::~Parents() { }  void Parents::reciveLetter(const Letter letterFromStudent) {     qDebug()&lt;&lt;&quot;Letter recived: &quot;;     qDebug()&lt;&lt;&quot;Letter text: &quot;&lt;&lt;letterFromStudent.text;     qDebug()&lt;&lt;&quot;Letter date: &quot;&lt;&lt;letterFromStudent.letterDate;     sendHelpToChild(letterFromStudent); }  void Parents::connectToDBusSignal() {     bool isConnected = QDBusConnection::sessionBus().connect(             &quot;&quot;,             dbus::servicePath(),             dbus::serviceName(),             &quot;needHelp&quot;, this,             SLOT(reciveLetter(Letter)));     if(!isConnected)         qDebug()&lt;&lt;&quot;Can't connect to needHelp signal&quot;;     else         qDebug()&lt;&lt;&quot;connect to needHelp signal&quot;;  }  void Parents::sendHelpToChild(const Letter letterFromStudent)  const {     Parcel preparingParcel;     preparingParcel.letter = writeLetter(letterFromStudent);     preparingParcel.someFood = poskrestiPoSusekam();     sendParcel(preparingParcel); }  void Parents::sendParcel(const Parcel parentsParcel) const {     const QString studentMethod = &quot;reciveParcel&quot;;     QDBusMessage sendParcel = QDBusMessage::createMethodCall(dbus::serviceName(), dbus::servicePath(), &quot;&quot;, studentMethod);      QList&lt;QVariant&gt; arg;     arg.append(qVariantFromValue(parentsParcel));      sendParcel.setArguments(arg);      if ( !QDBusConnection::sessionBus().send( sendParcel) )     {         qDebug()&lt;&lt;QString(&quot;D-bus %1 calling error: %2&quot;).arg(studentMethod).arg(QDBusConnection::sessionBus().lastError().message());     } }  Letter Parents::writeLetter(const Letter letterFromStudent) const {     QString text = &quot;We read about you problem so send some help&quot;;     Letter parentLetter;     parentLetter.text = text;     Money summ;     summ.summ = letterFromStudent.text.count(&quot;,&quot;)*100;     summ.summ += letterFromStudent.text.count(&quot;.&quot;)*50;     summ.summ += letterFromStudent.text.count(&quot; &quot;)*5;     summ.type = &quot;USD&quot;;     parentLetter.summ = summ;     parentLetter.letterDate = QDateTime::currentDateTime();     return parentLetter; }  Stuff Parents::poskrestiPoSusekam() const {     Stuff food;     food&lt;&lt;&quot;Russian donuts&quot;;     food&lt;&lt;&quot;Meat dumplings&quot;;     return food; } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/docs.google.com\/file\/d\/0B62_ua_jXsGjR3lITlJaQ1dXQ00\/edit?pli=1\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/224\/995\/629\/2249956291e04023433bd1e66e1f5f4c.png\" align=\"right\"\/><\/p>\n<h4>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0438\u0434\u0451\u0442 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0434\u043a\u043e<\/h4>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a D-Bus \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0430\u0434\u0430\u043b\u0430. \u0420\u0435\u0448\u0438\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c xml \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 Q_CLASSINFO. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[student.h]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\u2026 class Student : public QObject {     Q_OBJECT     Q_CLASSINFO(&quot;D-Bus Interface&quot;, &quot;org.student.interface&quot;)     Q_CLASSINFO(&quot;D-Bus Introspection&quot;, &quot;&quot;         &quot;&lt;interface name=\\&quot;org.student.interface\\&quot;&gt;\\n&quot;         &quot;  &lt;signal name=\\&quot;needHelp\\&quot;&gt;\\n&quot;         &quot;    &lt;arg name=\\&quot;reason\\&quot; type=\\&quot;((is)s((iii)(iiii)i))\\&quot; direction=\\&quot;out\\&quot;\/&gt;\\n&quot;         &quot;    &lt;annotation name=\\&quot;com.chameleon.QtDBus.QtTypeName.Out0\\&quot; value=\\&quot;Letter\\&quot;\/&gt;\\n&quot;         &quot;  &lt;\/signal&gt;\\n&quot;         &quot;  &lt;method name=\\&quot;reciveParcel\\&quot;&gt;\\n&quot;         &quot;    &lt;arg name=\\&quot;parcelFromParents\\&quot; type=\\&quot;(av((is)s((iii)(iiii)i)))\\&quot; direction=\\&quot;in\\&quot;\/&gt;\\n&quot;         &quot;    &lt;annotation name=\\&quot;org.qtproject.QtDBus.QtTypeName.In0\\&quot; value=\\&quot;Parcel\\&quot;\/&gt;\\n&quot;         &quot;    &lt;annotation name=\\&quot;org.freedesktop.DBus.Method.NoReply\\&quot; value=\\&quot;true\\&quot;\/&gt;\\n&quot;         &quot;  &lt;\/method&gt;\\n&quot;                 )  public:     Student(QObject *parent = 0); \u2026 <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 type \u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430, \u043e\u043d\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e <a href=\"http:\/\/dbus.freedesktop.org\/doc\/dbus-specification.html#type-system\">\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 D-Bus<\/a>. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0430\u0440\u0448\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0438\u043f\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 QDBusArgument, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 currentSignature().  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0442\u0438\u043f\u0430]<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">QDBusArgument arg; arg&lt;&lt;Parcel(); qDebug()&lt;&lt;&quot;Parcel signature: &quot;&lt;&lt;arg.currentSignature(); <\/code><\/pre>\n<\/div>\n<\/div>\n<h5>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438<\/h5>\n<p>  <\/p>\n<h6>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432<\/h6>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c qdbusviewer \u2014 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0438\u0442\u0441\u044f \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0437\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 dbus-monitor \u2014 \u043f\u043e\u0441\u043b\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/p>\n<h6>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/h6>\n<p>  qdbusviewer \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c d-feet. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0442\u0440\u0443\u0434\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043d\u044f\u0442\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">[\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 d-feet]<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b(\u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435):<br \/>  int(i) \u2014 \u0447\u0438\u0441\u043b\u043e (\u043f\u0440\u0438\u043c\u0435\u0440: 42);<br \/>  bool(b) \u2014 1 \u0438\u043b\u0438 0;<br \/>  double(d) \u2014 \u0447\u0438\u0441\u043b\u043e \u0441 \u0442\u043e\u0447\u043a\u043e\u0439 (\u043f\u0440\u0438\u043c\u0435\u0440: 3.1415);<br \/>  string(s) \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 (\u043f\u0440\u0438\u043c\u0435\u0440: \u201dstring\u201d);<br \/>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0432 \u0441\u043a\u043e\u0431\u043a\u0438 \u201c(\u201c \u0438 \u201c)\u201d, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e, \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0430\u0434\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<br \/>  \u041c\u0430\u0441\u0441\u0438\u0432\u044b \u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u201c[\u201c \u0438 \u201d]\u201d, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e.<\/p>\n<p>  \u0422\u0438\u043f\u044b Variant \u0438 Dict \u043d\u0435 \u0438\u0437\u0443\u0447\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.  <\/div>\n<\/div>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b:<br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/185212\/\">QtDbus \u2014 \u0442\u044c\u043c\u0430, \u043f\u043e\u043a\u0440\u044b\u0442\u0430\u044f \u0442\u0430\u0439\u043d\u043e\u044e. \u0427\u0430\u0441\u0442\u044c 1<\/a>, <a href=\"http:\/\/habrahabr.ru\/post\/185950\/\">\u0427\u0430\u0441\u0442\u044c 2<\/a><br \/>  <a href=\"http:\/\/qt-project.org\/doc\/\">Qt docs<\/a><br \/>  <a href=\"http:\/\/dbus.freedesktop.org\/doc\/dbus-specification.html\">D-Bus Specification<\/a><br \/>  <a href=\"http:\/\/techbase.kde.org\/Development\/Tutorials\/D-Bus\">KDE D-Bus Tutorial <\/a>\u0432 \u043e\u0431\u0449\u0435\u043c \u0438 <a href=\"http:\/\/techbase.kde.org\/Development\/Tutorials\/D-Bus\/CustomTypes\">CustomTypes <\/a>\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/220687\/\"> http:\/\/habrahabr.ru\/post\/220687\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/4bd\/72e\/04f\/4bd72e04f0248ce3ea2a17ae5c2f0dce.png\" alt=\"image\" align=\"left\"\/>\u041d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e D-Bus \u0432 Qt (<a href=\"http:\/\/habrahabr.ru\/post\/185212\/\">\u0440\u0430\u0437<\/a>) \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b (<a href=\"http:\/\/habrahabr.ru\/post\/185950\/\">\u0434\u0432\u0430<\/a>). \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0435\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0443\u0442\u0438.<br \/>  \u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0438\u0434 \u043f\u0430\u043c\u044f\u0442\u043a\u0438, \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0432\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432, \u0438 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u0433.<br \/>  <sub>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0438\u0437\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434 Qt 4.7(\u0421\u043f\u0430\u0441\u0438\u0431\u043e Squeeze \u0437\u0430 \u044d\u0442\u043e&#8230;), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438.<\/sub>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-220687","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=220687"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220687\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=220687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=220687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=220687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}