Qt 通过QtDBus 实现进程间通信

需求:实现一个守护进程,这个进程和web后台通信。并对另一个进程进行控制,包括重启,参数配置等。现在利用QtDBus来实现。

 

一,DBus简介

https://thebigdoc.readthedocs.io/en/latest/dbus/dbus.html

 

二,由于是在windows下使用 dbus,所以需要安装dbus环境

DBus-Windows-Installer-1.4.6-20110302-》  https://code.google.com/archive/p/dbus-windows-installer/downloads

 

三,编写xml文件,定义要使用的方法

比如Qt 自带的例子



	
		
		
		
		
		
	

五,

(1)服务端 pro配置

Qt 通过QtDBus 实现进程间通信_第1张图片

 

(2)编译服务端 代码 自动生成 interface 接口文件。(不要用手动生成)

Qt 通过QtDBus 实现进程间通信_第2张图片

(3)服务端使用 dbus

Qt 通过QtDBus 实现进程间通信_第3张图片

(4),在car 中定义 xml文件中的 槽,这样当会话总线上有消息过来时,就会链接到这个槽

Qt 通过QtDBus 实现进程间通信_第4张图片

六,

(1) 客户端pro配置

Qt 通过QtDBus 实现进程间通信_第5张图片

(2)编译客户端自动生成 interface 相关文件

Qt 通过QtDBus 实现进程间通信_第6张图片

(3)客户端使用 dbus

Qt 通过QtDBus 实现进程间通信_第7张图片

 

七,调试 dbus

qt 自带了一个 程序 来监视 dbus协议

Qt 通过QtDBus 实现进程间通信_第8张图片

Qt 通过QtDBus 实现进程间通信_第9张图片

 

八,备注

(1) ,xml文件 需要使用utf-8 编码,否则无法生成interface 文件和 adaptor文件

(2),如果使用QtCreator build 来构建,生成的interface和adaptor文件会在debug/release的上一级目录,代码里引用的时候需要 指明其上一级的路径,比如:#include "../controller_adaptor.h"

(3),路径和service name,有相关规则 不是随便填写。path 要以/ 开头,servicename 用 . 的形式。

(4),返回消息 可以这样:

QDBusMessage msg = QDBusMessage::createSignal("/Control", "org.example.ControlExample", "clientExit");    QDBusConnection::sessionBus().send(msg);

或者 把服务器 也当场客户端,把客户端也当成服务器 类似Qt例子  chat 那样

你可能感兴趣的:(Qt)