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



相关文章
|
28天前
|
C++
VS2019编译VTK-9.1.0+Qt5.15.2
本文介绍了在VS2019和Qt 5.15.2环境下编译VTK 9.1.0的过程,包括成功编译无警告和错误的截图、修改的pro文件内容,以及在QML中加入VTK的失败尝试和参考链接。
|
28天前
|
C语言 Android开发 C++
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
本文介绍了使用MTuner软件进行Qt MinGW编译程序的内存泄漏检测的方法,提供了MTuner的下载链接和测试代码示例,并通过将Debug程序拖入MTuner来定位内存泄漏问题。
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
|
28天前
|
C++
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
本文介绍了如何编译整合VTK 9.2、DICOM 0.8、DCMTK 3.6.7和Qt 6.2的步骤,包括安装Qt、CMake配置以及确认相关路径和版本设置。
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
|
28天前
|
Unix 网络虚拟化 C++
VS2022+Qt5.14.2成功编译MITK2022.10
使用VS2022和Qt5.14.2成功编译MITK2022.10的过程,包括编译结果的截图、遇到的编译问题的解决方法、两个重要的注意事项(patch文件格式的修改和ITK-gitclone-lastrun文件的存在),以及参考链接。文中详细描述了如何解决编译过程中遇到的错误C2220和警告C4819,以及如何修改文件编码和尾行格式。
VS2022+Qt5.14.2成功编译MITK2022.10
|
28天前
编译QCefView+VS2019+QT5.15.2
本文介绍了如何编译QCefView项目,并在VS2019和Qt 5.15.2环境下集成,包括编译结果、要点、cmake部署Qt的方法和相关参考链接。
编译QCefView+VS2019+QT5.15.2
|
28天前
|
人工智能
三战VS2019编译VTK7.1+Qt5.15.2
本文记录了作者在VS2019环境下编译VTK 7.1与Qt 5.15.2的历程,包括正确配置方法、遇到的编译错误以及解决过程。
|
28天前
|
人工智能 C++
初步编译QT5.15.2+VS2019+VTK8.2.0
本文介绍了在VS2019中编译QT 5.15.2和VTK 8.2.0的过程,包括编译结果、cmake库编译配置和cmake应用配置脚本,以及推荐的参考链接。
|
28天前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
28天前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
28天前
|
机器学习/深度学习 Java 计算机视觉
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
本文记录了使用mingw81_64编译OpenCV 4.5.5、Qt 5.15.2、VTK 9.1的详细过程,包括编译结果截图、编译步骤、遇到的问题及其解决方案,以及相关参考链接。文中还提到了如何编译boost源码为静态库,并提供了测试代码示例。
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录