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

简介: 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



相关文章
|
10天前
|
15天前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
51 2
|
25天前
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
25天前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
2月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
129 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
29天前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
38 0
|
25天前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
29天前
【qt】多窗口开发
【qt】多窗口开发
26 0
|
3月前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
3月前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
112 0

推荐镜像

更多