Qt開發技術:QDBus介紹、編譯與Demo

若該文爲原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:http://blog.csdn.net/qq21497936/article/details/77834743
各位讀者,知識無窮而人力有窮,要麼改需求,要麼找專業人士,要麼自己研究

紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中...(點擊傳送門)

Qt開發專欄:開發技術(點擊傳送門)

 

背景介紹

      這幾天,在開發VOI(Virtual OS Infrastructure)登錄界面,爲後續工作更好的開展和項目維護,將界面邏輯與功能實現分開,因涉及到登錄認證鏡像快照等後續持續性交互,採用QDBus。 

    [題外話:若只是一個簡答的登錄的界面,可使用QProcess調用腳本,等待腳本返回值來判斷登錄成功或者失敗] 

    背景不多說,下面開說,若有不對,請留言指正,歡迎探討,共同進步,謝謝!!!

 

QDBus基本介紹

    DBus分爲兩種類型:

  •     system bus(系統總線),用於系統(Linux)和用戶程序之間進行通信和消息的傳遞;
  •     session bus(回話總線),用於桌面(GNOME, KDE等)用戶程序之間進行通信。

 

QDBus之服務端

  服務器端分爲兩步,

    第一步:註冊服務;

    第二步:註冊對象,導入槽函數

    下面是註冊服務器對象的代碼:

服務端運行成功後,會在系統DBus總線上註冊服務,打開D-Feet軟件查看是否註冊成功,如下圖:

可以看到註冊的服務名稱,路徑,接口名稱,方法名稱,而DbusHandler類的頭文件如下圖:

由上圖可知,4個槽函數都被註冊到DBUS中,這主要是註冊對象時使用的參數,如下圖:

 

QDBus之客戶端

    客戶端我們使用了兩種方式(共三種)可以與服務器端通訊,分別:

  • 使用QDBusMessage
  • 使用QDBusInterface

客戶端的頭文件代碼如下:

其中尤爲重要的是服務器的名稱,服務器的地址,方法名稱,[參數],具體的實現方式見下圖代碼:

以上是不帶返回參數的客戶端代碼,這裏注意的是如果要寫接口名稱,則必須按照“local.進程名.對象名”作爲接口名稱(註冊多個對象具有相同的函數名就需要接口了),此次調試的系統爲ubuntu16.04;如果不寫接口名即爲空(“”),則直接匹配接口名。

    下圖爲帶返回參數的客戶端代碼:

 

QDBus之服務端D-Feet調試

    可能在寫服務器的時候,需要模仿客戶端發送指令,這時候D-Feet就用上了,運行服務端後,打開D-Feet,D-Feet界面如下圖:

雙擊“Methods”下的方法,即可彈出該方法的對話框,在數據裏面直接輸入,點擊“Execute”即可執行,並可獲得方法調用的返回值,如下圖:

QDBus之調試信息工具dbus-monitor

    使用該工具,可查看到相關執行的結果以及原因,之前一直使用接口名稱連接不上,使用調試信息後知道,接口名稱的規則是:“local.進程名.對象名”,使用過程也很簡單,直接在Terminal使用命令“dbus-monitor | grep 服務名”,    下圖是之前本人調試使用接口名調用失敗的原因:

    由上圖可知,沒有找到接口名“voi.server.QDBusHandler”,使用D-Feet即可知道事實上的接口名如下圖:

 

作者白話

    此次使用QDBus結束,後面若有補充會直接緊接此處往後寫,同時寫博客格式不好調整,故先使用word寫完原稿,然後將其截圖傳上博客。

    若有錯誤處,請各位批評指正,謝謝!

 

原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/77834743

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章