<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      QT D-Bus 復雜參數傳遞

      網上一搜,關于D-Bus和QT的資料不少,但是絕大多數都對傳遞自定義數據類型這個問題閉口不談。看來這個有必要寫個文章記錄一下。

      首先要說的是,我這里不再介紹D-Bus和QDbus的基礎知識,本文直擊要點。另外本文參考了KDE的一些文檔。

      需求:使用標準的信號和槽,通過QDBus傳遞自定義的struct或者class數據類型。

      首先,需要定義需要通過D-Bus傳遞的自定義數據類型,我們這里定義一個Message類型:
      #include <QtDBus>
       
      class Message
      {
      public:

      構造函數等略

      friend QDBusArgument &operator<<(QDBusArgument &argument, const Message &message);

      friend const QDBusArgument &operator>>(const QDBusArgument &argument, Message &message);

      static void registerMetaType();
       
      private:
          QString m_strMessage;
      };
       
      Q_DECLARE_METATYPE(Message)

      可以看到有幾個比較特殊的地方:

      首先我們重載了<<和>>兩個運算符,這是將自定義數據類型融合到QT的類型系統所必需的:
      QDBusArgument &operator<<(QDBusArgument &argument, const Message& message)
      {

      argument.beginStructure();

      argument << message.m_strMessage;

      argument.endStructure();

      return argument;
      }
       
      const QDBusArgument &operator>>(const QDBusArgument &argument, Message &message)
      {

      argument.beginStructure();

      argument >> message.m_strMessage;

      argument.endStructure();

      return argument;
      }

      其次,這個自定義數據類型需要注冊到QT和D-Bus的類型系統:
      void Message::registerMetaType()
      {

      qRegisterMetaType<Message>("Message");

      qDBusRegisterMetaType<Message>();
      }

      有了這個數據類型,就可以寫描述D-Bus接口的XML文件了:

      <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
      <node>
          <interface name="demo.Action">
              <signal name="messageSent">
                  <arg name="message" type="a(i)" direction="out"/>
                  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="Message"/>
              </signal>
              <method name="sendMessage">
                  <arg name="message" type="a(i)" direction="in"/>
                  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="Message"/>
              </method>
          </interface>
      </node>

      這里有兩個特殊點,一個是參數的數據類型,因為是我們自定義的,不存在于D-Bus規范中,所以參數的type在這里可以亂寫。另一個就是,既然是自定義的,就要說明這個自定義的數據類型到底是啥(在這里是Message)。

      OK,有了上面這些啰嗦的準備工作,下面調用QT自帶的D-Bus工具,就可以自動生成相關的接口和代理類了:

      qdbusxml2cpp Chat.xml -i Message.h -a MessageAdaptor

      qdbusxml2cpp Chat.xml -i Message.h -p MessageInterface

      后續就是標準的調用QDBus過程了,本文不再廢話,請參考其他入門資料。大體上就是這樣:

      接收:

      connect(&m_MessageInterface, SIGNAL(messageSent(Message)), SLOT(onMessageSent(Message)));

      發送:

      Message message(…);

      m_MessageInterface.sendMessage(message);

      posted @ 2015-01-17 22:31  Skogkatt  閱讀(2636)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 91精品人妻中文字幕色| 青青草无码免费一二三区| 另类图片亚洲人妻中文无码| 国产福利精品一区二区| 韩国精品一区二区三区在线观看 | 精品国产中文字幕av| 九九视频热最新在线视频| 四虎库影成人在线播放| 国产色视频网站免费| 久久av高潮av喷水av无码| 99久久亚洲综合精品成人| 精品久久久中文字幕人妻| 国产综合色在线精品| 久久99久久99精品免视看国产成人| 久久国产福利播放| 彭州市| 91精品国产色综合久久不| 国产av亚洲一区二区| 四虎国产精品永久免费网址| 亚洲日本精品一区二区| 日韩伦理片| 国产乱女乱子视频在线播放| 亚洲精品国产一二三区| 强奷乱码中文字幕| 国产精品毛片av999999| 精品日韩精品国产另类专区| 欧美人与动牲交A免费观看| 另类 专区 欧美 制服| 欧美性猛交xxxx乱大交极品| 中国猛少妇色xxxxx| 国产精品成人综合色在线| 亚洲av男人电影天堂热app| 亚洲精品国偷自产在线99人热| 国产极品尤物粉嫩在线观看| 蜜桃av无码免费看永久| 一个色综合国产色综合| 石泉县| 国产精品午夜福利视频| 久久永久视频| 久久久亚洲欧洲日产国码农村| 久久久无码精品亚洲日韩蜜桃|