自Qt 5.9之后,Qt推出了一个框架库,Qt称作Qt Remote Objects(QtRO),我自己翻译为远端可调用对象哈哈,不像其他的Qt功能库,这个是没有示例工程的,只有一个在帮助手册overview里面的三个例子,那么先说明Qt的RO是什么
首先,进程通信一般分为 消息队列,共享内存,管道(有名和无名),TCP/UDP等,也就是IPC的绝大多数机制,当然TCP和UDP可以具有RPC的机制,如果你要写的话;
传统的进程通信已经无法满足分布式等跨越机器网络的函数调用、耦合度降低、可扩展等情况,那么就需要一些可以复用的框架扩展,于是出现了COM通信调用,ICE框架等,但是使用这些框架有问题在于平台的兼容问题;那么问题来了,如果自己拿Qt的原有框架写要怎么写一个呢,我想大家无非就是想QT现在做的一样,自己搞一个映射吧
那么可以猜测我们要这样子写
1、建立通信 :TCP或者管道,建立客户端和服务
2、定义模板,需要公布对外的函数,对象,使用字符串发布到服务,或者协议内
3、建立自身的函数接口映射,当服务器发送消息的时候调用对应的函数和参数
4、管理自身的连接
以上几部只是大概的按照工作经验猜测Qt的RO逻辑,实际上也差不多,那么可想而知,Qt的qml通信,QT和web的包裹通信也是应该是使用这个机制,研究这个机制,也就很容易了解了其他几个的机制,在编写代码的时候,也会很清楚写的意义,好了,下面我们开始学习QT的示例代码
例子1 单机静态编码直连
帮助手册翻译
1.第一步,创建一个Rep文件(但是我个人觉的还是先创建一个控制台工程,再添加该文件)
QT示例代码如上
该文件作用是一个模版,用于后面由Qt目录下面的repc编译生成对应的一些代码,有点像信号与槽,之后生moc文件或者ui生成xxx_ui.h文件
PROP是在手册里面有说明,表示是一个属性,QT元对象系统里面对应会生成QProperty声明,qml也是类似,声明作用在于会生成对应的读写、信号等函数操作,而且都可以对外调用
类似的宏可以看Qt手册里面的解释
SLOT就不用说了,是声明一个槽函数
2.添加到工程中(这个也就是为什么我说最好先创建工程的原因)