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

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