QT QDbus_qt qdbusconnection-程序员宅基地

技术标签: QT  

通过Dbus 总线,客户端调用服务端的槽函数
服务端

1.新建项目QdbusTestServer

在.pro工程中增加QT += dbus

2.新建类 Cal定义接口和函数add(),sub()

定义接口名com.example.dbus.Interface
Q_CLASSINFO(“D-Bus Interface”,”com.example.dbus.Interface”)

cal.h
#include "qobject.h"
class Cal : public QObject
{
    Q_OBJECT
    Q_CLASSINFO("D-Bus Interface","com.example.dbus.Interface")
public:
    Cal();
public slots:
    int add(int,int);
    int sub(int,int);
};

cal.cpp
#include "cal.h"

Cal::Cal() :QObject()
{

}

int Cal::add(int a, int b){

    return a+b;
}

int Cal::sub(int a, int b){
    return a-b;
}

3.生成xml接口文件,生成Adapter,Interface文件

qdbuscpp2xml -M cal.h -o com.example.dbus.xml
qdbusxml2cpp com.example.dbus.xml -a cal_adaptor
qdbusxml2cpp com.example.dbus.xml -p cal_interface
将生成的文件加到工程中
这里写图片描述

4.服务端创建QDBusConnection对象,注册服务和对象

  Cal *cal = new Cal();
    new InterfaceAdaptor(cal);
    QDBusConnection connection = QDBusConnection::sessionBus();
//注册服务名
    connection.registerService("com.example.dbus");
    //注册对象名
    connection.registerObject("/", cal);

运行QT程序,用q-dfeet检查服务是否注册成功
这里写图片描述
测试:
~$ dbus-send –session –print-reply –dest=com.example.dbus / com.example.dbus.Interface.add int32:5 int32:6
method return sender=:1.1707 -> dest=:1.1710 reply_serial=2
int32 11

客户端调用服务端的函数

1.新建工程QdbusTestClient

新建工程QdbusTestClient
在.pro中增加QT += dbus
增加要访问的接口文件cal_interface.h cal_interface.cpp

2.在main函数中

QDBusConnection connection = QDBusConnection::sessionBus();
    com::example::dbus::Interface *iface;//用interface新建一个iface接口
//参数:com.example.dbus 是服务端创建的服务名,参数:/ 为服务端创建的Object Path
//参数:connection 为申请的connection
//参数:w.parent() 为当前对象this
    iface = new com::example::dbus::Interface("com.example.dbus","/",
                                   connection,w.parent());

 QDBusPendingReply<int> posReply = iface->add(15,10);//调用服务端的接口函数
    posReply.waitForFinished();


     qDebug() << posReply.value(); //输出返回结果25

测试

$ dbus-monitor --session \ "type='method_call',interface='com.example.dbus.Interface'"


method call sender=:1.1837 -> dest=com.example.dbus serial=9 path=/; interface=com.example.dbus.Interface; member=add
   int32 15
   int32 10

总结:服务端引入文件cal_adapter.h cal_adapter.cpp
客户端引入文件cal_interface.h cal_interface.cpp

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shui1025701856/article/details/79928326

智能推荐

[Struts2]<s:iterator>各种遍历用法_struts2 s:iterator无数据遍历-程序员宅基地

文章浏览阅读4.1k次。struts s:iterator_struts2 s:iterator无数据遍历

oracle有两个R2文件,Oracle 11gR2(11.2.0.4)安装包(7个)作用说明-程序员宅基地

文章浏览阅读299次。在之前使用Oracle10G的时候,官网下载的数据库安装包只有两个文件,解压合并后为完整的安装包。后来因为检查出多个Oracle漏洞,需要现场Oracle数据库版本需要升级到11.2.0.4,下载的时候发现有7个压缩包(有点小懵,就全下载下来了,幸亏家里的网速还算给力),下面简单说明一下这7个压缩包的作用。1、p13390677_112040_MSWIN-x86-64_1of7.zip2、p133..._p13390677_112040_mswin-x86-64_4of7

react-native--03开发环境&amp;真机调试_pycharm react native-程序员宅基地

文章浏览阅读351次。IDE -&gt; WebStorm目前市面上的IDE,有知名的Sublime和jetbrains,其中jetbrains有一系列的IDE支持多种语言,如JAVA(IntelliJ IDEA)、Python(Pycharm)、Ruby(RubyMine)、Javascript/html/css(WebStorm),由于我本人长期开发Python,采用的是Pycharm,因此我个人倾向与采用WebS..._pycharm react native

linux中使用make命令编译_linux make编译-程序员宅基地

文章浏览阅读4.4k次。1、文件夹中仅存在.c文件,不存在makefile:----------直接make .c的文件名例如:main.c执行 make main-----》会执行 gcc main.c -o main2、文件夹中存在.c文件和makefile,makefile中仅有编译选项和链接选项main.c makefile//makefile中内容:CFLAGS += -D_FILE_OFFSET_BITS=64 -D_XOPEN_SOURCE..._linux make编译

LTE小区搜索过程_不插卡lte能收到sib消息吗-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏25次。LTE小区搜索过程 a) UE一开机,就会在可能存在LTE小区的几个中心频点上接收数据并计算带宽RSSI,以接收信号强度来判断这个频点周围是否可能存在小区(应该说只是可能),如果UE能保存上次关机时的频点和运营商信息,则开机后可能会先在上次驻留的小区上尝试驻留;如果没有先验信息,则很可能要全频段搜索,发现信号较强的频点,再去尝试驻留。 b) 然后在这个中心频点周围收PSS(primary syn_不插卡lte能收到sib消息吗

计算机专业哪些学校考研复试刷人少,复试压分严重、刷人比例高……这些院校慎重报考!附20考研弃考率...-程序员宅基地

文章浏览阅读2.1k次。距离21年考研仅剩最后59天了,大部分的小伙伴应该已经准备好进行冲刺了吧?接下来要把政英放到重点位置了哦!另外,21考研报名也快要结束了,今天给大家整理了一下往年复试相关的情况,一起来看一下吧~各种问题清单不保护一志愿的学校华南师范大学、华中师范大学、江南大学、广西大学等去年都发生过这种现象!今年还不知道会不会如此。不保护第一志愿有超级好的学校也有差的学校,大家报考可以权衡利弊后再来决定是否报考。..._计算机专业考试压分的学校

随便推点

SpringSecurity学习(二)——SpringSecurity入门_springsecord-程序员宅基地

文章浏览阅读135次。一、准备1、创建SpringBoot项目2、pom.xml配置依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/> <!-- lookup _springsecord

Android EditText过滤换行符,回车符和空白符,以及过滤表情_android edittext 过滤换行按钮-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏5次。Android EditText过滤换行符,回车符和空白符,以及过滤表情查看文章前请参考:Java 中 Emoji 的正则表达式功能介绍过滤换行符,回车符,空白符过滤Emoji1. 背景项目有个需求,所有与“标题”有关的输入,都不允许有换行。第一次拿到这个需求的时候觉得很简单,直接设置一个InputFilterpublic class NewlineFilter..._android edittext 过滤换行按钮

org.codehaus.jackson.type.JavaType.isMapLikeType() 解决_java.lang.nosuchmethoderror: org.codehaus.jackson.-程序员宅基地

文章浏览阅读2.7k次。 nested exception is java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.isMapLikeType()这个问题是 jackson 包版本和你现在的环境不支持。解决办法:一:jackson 各种类型的包版本号最好一致,在不同的环境上回冲突(改天细讲)二:jackson jar包主要是json转换实体..._java.lang.nosuchmethoderror: org.codehaus.jackson.type.javatype.ismapliketyp

推荐一些非常实用的工具_除了python有什么简单的工具可以爬取设计素材-程序员宅基地

文章浏览阅读689次。推荐工具 一些实用的工具 1)凡科快图:极简图片编辑工具 免费商用/拖拽操作/海量模板素材 链接:https://kt.fkw.com/..._除了python有什么简单的工具可以爬取设计素材

排序合并连接(sort merge join)的原理_merge join sort key选择-程序员宅基地

文章浏览阅读1.9k次。访问次数:两张表都只会访问0次或1次。驱动表是否有顺序:无。是否要排序:是。应用场景:当结果集已经排过序。排序合并连接原理:如果A表的数据为(2,1,4,5,2),B表的数据为(2,2,1,3,1) ,首先将A表和B表全扫描后排序,如下:A B1 12 12 24 25 3因为没有驱动表,所以oracle会随机选择一张_merge join sort key选择

android数据库存储位置,android数据库存放位置-程序员宅基地

文章浏览阅读2.4k次。乐视手机6.0本来数据库放在Andoid/data 文件夹下dbFilePath = Environment.getExternalStorageDirectory() + "/Android/data/" + appFolderName + "/db";但是删除程序数据也删除了...只能自己建文件夹了if (Environment.getExternalStorageState().equals..._安卓应用数据库文件存放位置