Qt Remote Objects (QtRO) 笔记

简介

Qt Remote Objects (QtRO) 是 Qt 的一个进程间通信模块。

术语

Source 是指提供服务或提供功能供其他程序使用的对象,是 RPC 中的被调用端。

Replica 是指 Source 对象的代理对象,用于 RPC 中的调用端,对 Replica 的调用请求将被转发给 Source 对象。

示例1:Direct Connection using a Static Source

创建接口定义文件

创建接口定义文件 simpleswitch.rep :

class SimpleSwitch
{PROP(bool currState=false);SLOT(server_slot(bool clientState));
};

修改 .pro 文件

// 引入 QtRO 模块
QT += remoteobjects
// 引入接口定义文件
REPC_SOURCE = simpleswitch.rep

Qt 将使用 repc 工具编译该接口定义文件生成 C++ 代码。

生成的文件:

  • rep_simpleswitch_source.h
  • rep_simpleswitch_replica.h

rep_simpleswitch_source.h 用于 Source 端,需要继承其中的接口类,实现其中的虚函数。

rep_simpleswitch_replica.h 用于 Replica 端,是 Source 对象的代理对象。

Source 端

实现 rep_simpleswitch_source.h 中接口类的虚函数,作为服务对象。

创建服务对象,并设置为可远程访问:

SimpleSwitch srcSwitch; // create simple switchQRemoteObjectHost srcNode(QUrl(QStringLiteral("local:replica"))); // create host node without Registry
srcNode.enableRemoting(&srcSwitch); // enable remoting/Sharing

Replica 端

连接到服务端:

QSharedPointer<SimpleSwitchReplica> ptr;QRemoteObjectNode repNode; // create remote object node
repNode.connectToNode(QUrl(QStringLiteral("local:replica"))); // connect with remote host nodeptr.reset(repNode.acquire<SimpleSwitchReplica>()); // acquire replica of source from host node

获取到 SimpleSwitchReplica 对象指针之后,就可以像使用普通 Qt 对象那样使用该对象,该对象拥有和服务对象相同的接口函数(信号函数、槽函数等)。

客户端也可以不使用 rep_simpleswitch_replica.h ,而是使用 QRemoteObjectDynamicReplica 类来动态地与服务对象交互。

示例2:Connections to Remote Nodes using a Registry

第一个示例是采用直接连接的方式,即代理对象直接连接到服务对象。

另一种方式是使用注册中心,此时服务对象将自己注册到服务中心,客户端连接到注册中心,然后获取指定服务对象的代理对象。

服务端:

// 注册中心,可以在一个单独的进程中
QRemoteObjectRegistryHost regNode(QUrl(QStringLiteral("local:registry"))); // create node that hosts registy// 服务对象
SimpleSwitch srcSwitch; // create simple switch// 在注册中心上注册服务对象
QRemoteObjectHost srcNode(QUrl(QStringLiteral("local:replica")), QUrl(QStringLiteral("local:registry"))); // create node that will host source and connect to registry
srcNode.enableRemoting(&srcSwitch); // enable remoting of source object

客户端:

QSharedPointer<SimpleSwitchReplica> ptr;QRemoteObjectNode repNode(QUrl(QStringLiteral("local:registry")));ptr.reset(repNode.acquire<SimpleSwitchReplica>()); // acquire replica of source from host node

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

App.vue触发axios报错及解决方案

App.vue触发axios报错及解决方案 修改根目录下vue.config.js文件 module.exports {publicPath: ./,assetsDir: assets,configureWebpack: {devServer: {client: {overlay: false}}} }重新npm run dev 搞定

十个排序算法

目录 冒泡排序(Bubble Sort) 选择排序(Select Sort) 插入排序&#xff08;InsertSort&#xff09; 希尔排序&#xff08;ShellSort&#xff09; 计数排序&#xff08;CountSort&#xff09; 快速排序&#xff08;QuickSort&#xff09; 归并排序&#xff08;Merge Sort&a…

双击返回键,轻松处理 WebView 中的后退事件

引言 在移动应用开发中&#xff0c;WebView 组件因其能够展示网页内容的能力而变得日益重要。它允许开发者在应用内部直接嵌入网页&#xff0c;无需离开应用即可查看和交互丰富的网络信息和媒体内容。WebView 的普及&#xff0c;使得用户可以在一个统一的环境中流畅地使用应用…

树状数组模板

单点更新 区间查询 使用树状数组维护原数组即可 public class Test01 {static final int N 10010;static int[] c new int[N];static int n;public static void main(String[] args) {Scanner in new Scanner(System.in);n in.nextInt();for (int i 1; i < n; i) {in…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

scoped原理及使用

一、什么是scoped&#xff0c;为什么要用 在vue文件中的style标签上&#xff0c;有一个特殊的属性&#xff1a;scoped。 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。…

重构智能防丢产品,苹果Find My技术引领市场发展

目前市场上最主要的防丢技术是蓝牙防丢和GPS防丢&#xff0c;蓝牙防丢是通过感应防丢器与绑定手机的距离来实现防丢的。一般防丢会默认设置一个最远安全距离&#xff0c;超过这个安全距离后&#xff0c;与手机蓝牙信号断开&#xff0c;触发防丢报警&#xff0c;用户根据防丢报警…

高可用系列特殊场景:第三方限时唯一访问令牌

一、业务特点 很多第三方服务&#xff0c;都使用访问令牌来做访问验证&#xff0c;比如某度、某信的access token&#xff0c;主要特征如下&#xff1a; 1、令牌由第三方系统发放&#xff0c;用于访问第三方特定资源&#xff1b; 2、令牌存在有效期限&#xff0c;过期自动失…

学习java第三十三天

Spring 官网列出的 Spring 的 6 个特征: 核心技术 &#xff1a;依赖注入(DI)&#xff0c;AOP&#xff0c;事件(events)&#xff0c;资源&#xff0c;i18n&#xff0c;验证&#xff0c;数据绑定&#xff0c;类型转换&#xff0c;SpEL。 测试 &#xff1a;模拟对象&#xff0c;Te…

Shell GPT:直接安装使用的chatgpt应用软件

ShellGPT是一款基于预训练生成式Transformer模型&#xff08;如GPT系列&#xff09;构建的智能Shell工具。它将先进的自然语言处理能力集成到Shell环境中&#xff0c;使用户能够使用接近日常对话的语言来操作和控制操作系统。 官网&#xff1a;GitHub - akl7777777/ShellGPT: *…

深度学习理论基础(三)封装数据集及手写数字识别

目录 前期准备一、制作数据集1. excel表格数据2. 代码 二、手写数字识别1. 下载数据集2. 搭建模型3. 训练网络4. 测试网络5. 保存训练模型6. 导入已经训练好的模型文件7. 完整代码 前期准备 必须使用 3 个 PyTorch 内置的实用工具&#xff08;utils&#xff09;&#xff1a; ⚫…

【4.5】

多重映射 典题&#xff0c;多次整体修改&#xff0c;把所有的 a i x a_ix ai​x 改成 a i y a_iy ai​y 。时间逆序。 圆 朴素区间 DP 时间是 O ( n 3 ) O(n^3) O(n3) 的&#xff0c;考虑如何枚举以达到优化。 优化思路类似于【智乃想考一道完全背包】。 外向树 较好…

mysql 通配符与模式匹配用法详解

一、通配符 什么是通配符&#xff1f; 通配符用于替换字符串中的一个或多个字符。 通配符通常与LIKE、NOT LIKE操作符一起使用。LIKE操作符在WHERE子句中用于搜索列中的指定模式。 Mysql 有哪些通配符&#xff1f; % &#xff1a;百分号通配符&#xff0c;表示匹配0个或多个…

TXT文本高效编辑神器,教你进行隔行删除不需要的内容,轻松整理文本内容。

在信息爆炸的时代&#xff0c;我们每天都会接触到大量的文本信息&#xff0c;无论是工作中的报告、邮件&#xff0c;还是生活中的读书笔记、备忘录&#xff0c;都需要我们对文本进行高效的管理和编辑。然而&#xff0c;传统的文本编辑方式往往繁琐低效&#xff0c;无法满足我们…

PTA L2-048 寻宝图

给定一幅地图&#xff0c;其中有水域&#xff0c;有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏&#xff0c;这些有宝藏的点也被标记出来了。本题就请你统计一下&#xff0c;给定的地图上一共有多少岛屿&#xff0c;其中有多少是有宝藏的岛屿。 输入格式&#xf…

程序员35岁现象:年龄与职业发展的辩证关系

程序员35岁现象&#xff1a;年龄与职业发展的辩证关系 引言 近年来&#xff0c;关于程序员职业发展的“35岁现象”引发了业界内外的广泛关注。人们普遍认为35岁是一道程序员生涯的分水岭&#xff0c;一部分人担忧随着年龄增长&#xff0c;技术更新速度快&#xff0c;资深程序员…

LeetCode练习题--567.字符串的排列

今天讲一个非常经典的滑动窗口的问题 这道题的意思很明显: 给你两个字符串s1与s2,判断s2中是否存在一个子串:它包含s1中所有字符且不包含其他字符 让我们先来写一下滑动窗口的模板: /*** 滑动窗口模板 * param s1 * param s2 */public static void model (String s1, String s2…

包装类知识总结

包装类的使用1. 为什么要使用包装类&#xff1f; 为了使得基本数据类型的变量具备引用数据类型变量的相关特征&#xff08;比如&#xff1a;封装性、继承性、多态性&#xff09;&#xff0c;我们给各个基本数据 类型的变量都提供了对应的包装类。 为了让基本数据类型也可以有引…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…