300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Qt开发技术:QDBus介绍 编译与Demo

Qt开发技术:QDBus介绍 编译与Demo

时间:2020-12-07 17:22:08

相关推荐

Qt开发技术:QDBus介绍 编译与Demo

若该文为原创文章,未经允许

原博主博客地址:/qq21497936

原博主博客导航:/qq21497936/article/details/102478062

本文章博客地址:/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写完原稿,然后将其截图传上博客。

若有错误处,请各位批评指正,谢谢!

原博主博客地址:/qq21497936

原博主博客导航:/qq21497936/article/details/102478062

本文章博客地址:/qq21497936/article/details/77834743

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。