QT:不同UI间数据,信号的交互

前言

  接上文,手动绘制的矩形框毕竟还是在上位机的播放界面内,想要把数据发送给3559还是需要通过串口或者网口发送,没有部署在一个界面就需要不同UI间数据和信号进行交互了,数据还好说,全局变量都可以做到,信号的话使用connect将信号和槽连接起来就可以了,对于槽函数和信号发起者和槽的接收者一定要注意匹配

同一个界面的信号和槽

  在Qt中,信号和槽是一种非常重要的机制,用于实现对象间的通信和交互。信号是对象发出的事件,槽是响应这些事件的函数。一个对象可以通过emit关键字发出一个信号,其他对象可以将自己的槽函数与这个信号连接起来,当信号被发出时,所有与之连接的槽函数都会被调用。
  在同一个界面中,可以通过对象之间的信号和槽连接来实现界面控件之间的交互。具体步骤如下:
  1. 在界面设计时,为需要接收信号的控件设置一个名称,方便后续使用。
  2. 在界面对应的类中,定义槽函数,在槽函数中实现对控件的操作。
  3. 在类的构造函数中,将控件的信号与槽函数连接起来。使用QObject::connect函数实现连接,其语法如下:

connect(sender, signal, receiver, slot);

  其中,sender是发出信号的对象,signal是信号名称,receiver是接收信号的对象,slot是槽函数名称。
例如,如果想将一个按钮的clicked()信号和一个自定义的槽函数相连接,可以用下面的代码:

connect(ui->button, &QPushButton::clicked, this, &MyClass::mySlot);

  在点击按钮时,emit clicked()信号,就会调用mySlot()函数。
  4. 在槽函数的实现中,注意可以通过sender()函数获取发出信号的对象指针,进而对该对象进行操作。
总之,通过信号和槽的连接,可以实现同一个界面中不同控件之间的交互和协作,提高界面的交互性和可用性。
比如想要实现在播放界面框选目标,3559实现跟踪功能
在这里插入图片描述
  就需要在播放区域绘制矩形框后发送信号给button,button作为槽再解决发送的问题,我觉得可以理解为中断处理函数,微观上讲,发出了信号就好比产生了中断,连接信号槽之后就好比跳转到了中断处理函数,解决完再次返回,宏观上同时进行
  先在头文件中申明信号

signals:void buttonClicked_ctrl_left();//通知串口网口void buttonClicked_shift_left();//通知串口网口void buttonClicked_exit_left();//通知串口网口

写出对应的槽函数,注意此时的槽函数是执行发送了另一个信号

void rtsp::on_pushButton_clicked()
{emit buttonClicked_ctrl_left1();
}void rtsp::on_pushButton_2_clicked()
{emit buttonClicked_shift_left1();
}void rtsp::on_pushButton_3_clicked()
{emit buttonClicked_exit_left1();
}

  在构造函数内将信号和槽连接,播放部分的类是FFmpegWidget,在界面中命名为playWidget,一定一定要匹配信号的发起者和槽的接收者

connect(ui_rtsp->playWidget, &FFmpegWidget::buttonClicked_ctrl_left, this, &rtsp::on_pushButton_clicked);
connect(ui_rtsp->playWidget, &FFmpegWidget::buttonClicked_shift_left, this, &rtsp::on_pushButton_2_clicked);
connect(ui_rtsp->playWidget, &FFmpegWidget::buttonClicked_exit_left, this, &rtsp::on_pushButton_3_clicked);

不同界面的信号和槽

  不同界面之间的连接也可用通过类似方式,但是slots需要声明为public
  申明信号

signals:void buttonClicked_ctrl_left1();//通知串口网口void buttonClicked_shift_left1();//通知串口网口void buttonClicked_exit_left1();//通知串口网口

  申明槽函数

public slots:void on_pushButton_3_clicked();void on_pushButton_31_clicked();void on_pushButton_clicked();

  main函数中将二者连接

	rtsp w;serial w2;QObject::connect(&w, &rtsp::buttonClicked_ctrl_left1, &w2, &serial::on_pushButton_3_clicked);QObject::connect(&w, &rtsp::buttonClicked_shift_left1, &w2, &serial::on_pushButton_31_clicked);QObject::connect(&w, &rtsp::buttonClicked_exit_left1, &w2, &serial::on_pushButton_clicked);

  槽函数内将传来的坐标换算发送即可
在这里插入图片描述
在这里插入图片描述
  测试发现绘制的矩形框和跟踪结果完全一致,非常成功

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

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

相关文章

【c++】反向迭代器的探究实现

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 在list中我们实现了正向的迭代器,学习完优先级队列后,我们也对适配器模式有了一个深刻的理解,这篇文章基于这种模式下,实现各类容器的反向迭…

Docker-compose部署LTC同步节点

1、下载ltc程序包,litecoin下载地址 下载页 mkdir /data/docker-compose/ltc cd /data/docker-compose/ltc https://github.com/litecoin-project/litecoin/releases/download/v0.21.3/litecoin-0.21.3-x86_64-linux-gnu.tar.gz2、编写dockerfile和bitcoin.conf b…

头歌:Spark Streaming

第1关:套接字流实现黑名单过滤 简介 套接字流是通过监听Socket端口接收的数据,相当于Socket之间的通信,任何用户在用Socket(套接字)通信之前,首先要先申请一个Socket号,Socket号相当于该用户…

你不知道的CSS函数calc():解锁布局设计的新维度

在CSS的世界里,精确控制元素的尺寸和位置是每个前端开发者追求的目标。而CSS3引入的calc()函数,无疑为我们提供了前所未有的灵活性和精准度,让我们能够动态计算长度、宽度、高度等属性值,实现更为复杂的布局效果。本文将深入探讨c…

IDEA连接数据库

先在本地安装mysql connector net 安装navicat,连接mysql,并对mysql中的内容进行修改和查看,如新建数据库,新建表等 社区版的idea界面中找不到database选项,需要先在setting中的plugin中安装database navicate&#…

我开始接单/兼职/搞副业/建设个人社区,为自己谋后路了。

我开始接单/兼职/搞副业/建设个人社区,为自己谋后路了。 简述 大家好,我是小荣,一个前端开发程序员。我最近开始在业余时间接私单了,也在想一些能够带来成长,收入的副业,主要也是为了自己谋后路&#xff…

C语言:数据结构(双向链表)

目录 1、双向链表的结构2、顺序表和双向链表的优缺点分析3、双向链表的实现 1、双向链表的结构 注意:这⾥的“带头“跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了更好的理解就直接称为单链表的头节点。 带…

SSH远程登录实操实验!

ssh远程登录协议:默认端口号22 以下实验7-2是服务端,7-1是客户端 服务器的相关信息: 服务名称:sshd 服务端主程序:/usr/sbin/sshd 服务端配置文件:/etc/ssh/sshd_config 客户端相关信息: …

python的输入输出(爽文,备忘,查询,友好)

Python中的输入输出主要涉及到输入函数和输出函数。 输出函数:print() print() 函数用于将信息输出到屏幕上。它可以输出字符串、变量的值,以及其他各种数据类型。 name "Alice" age 30 print("姓名:", name, "年龄:&quo…

ip ssl证书无限端口网站

IP SSL证书是由CA认证机构颁发的一种特殊数字证书。大部分SSL数字证书都需要用户使用域名进行申请,想要对公网IP地址加密实现https访问就需要申请IP SSL证书。IP SSL证书采用了强大的加密算法,可以有效地防止数据在传输过程中被窃取或篡改,具…

Java-IO-FAQ-文件写操作时自动创建文件和目录

1 需求 2 接口 3 示例 在Java中,使用FileOutputStream或FileWriter来写入文件时,如果指定的文件不存在,那么这些类默认会创建该文件。但是,如果文件路径中的目录不存在,这些类不会自动创建缺失的目录。 如果你想在写…

[C语言]典型例题:小蚂蚁爬橡皮筋、买汽水问题、导致单词块、菱形打印……

1、小蚂蚁爬橡皮筋问题 假设橡皮筋长4m,小蚂蚁从一端爬向另一端每天爬1m,且每爬了1m,橡皮筋会立马拉伸4m,在理想条件下,小蚂蚁需要爬多少天可以到达橡皮筋的另一端? 不仔细想,我们很可能认为小蚂…

Scikit-Learn回归树

Scikit-Learn回归树 1、决策树1.1、什么是决策树1.2、决策树学习的步骤1.3、决策树算法 1、决策树 决策树(DTs)是一种用于回归和分类的有监督学习方法。通常,决策树用于分类问题;当决策树用于回归问题时,称为回归树。回…

两性情感课程笔记 2020~2023

2020 剽悍生活博客七爱哦耶浪迹小鹿魔卡Chris李越泰阳欧阳浮夸舞步爱情光谱乌鸦倪称男哥路易梵公子绅士派艾克迪诺校长感觉流卡卡危险人物晓辉爱上情感恋爱研习社摄影艾瑞克Chic情叔明日恋爱情受最绅士魅男其它 2021 城市猎人知乎文章 20210926阿尔法安小妖曹学敏Chris七分学…

【C++】:日期类的实现 -- 日期计算器

前言 1.日期类是一种十分经典的类型。对于C的初学者,它能够帮助我们融会贯通许多C的基础知识,它涉及许多的基础语法,比如引用,函数重载,传值/传参返回,构造函数,运算符重载,const成…

【Python小练】求斐波那契数列第n个数

题目 输出斐波那契数列第n个数。 分析 首先我们要知道,斐波那契数列,这个数列从第三位开始等于前两个数的和,要知道数列第n个数(n>2),就要知道其前两相的值,着就需要用到递归了。来看一下吧…

C语言实验-循环结构和选择结构

一&#xff1a; 求和:1(14)(149)(14916)…(14916…n2)? 其中n的值由键盘输入&#xff1b; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int sum 0;int n 0;printf("请输入一个整数");scanf("%d", &n);for (int i 0; i &l…

Apache中如何配置 ws 接口

Apache中如何配置 wss 接口 在Apache中配置WebSockets的支持&#xff0c;你需要使用mod_proxy_wstunnel模块&#xff0c;该模块是Apache的一个代理模块&#xff0c;它允许你代理WebSocket请求。 以下是配置步骤的简要说明和示例&#xff1a; 确保你的Apache服务器安装了mod_…

【最大公约数 排序】2344. 使数组可以被整除的最少删除次数

本文涉及知识点 最大公约数 排序 LeetCode2344. 使数组可以被整除的最少删除次数 给你两个正整数数组 nums 和 numsDivide 。你可以从 nums 中删除任意数目的元素。 请你返回使 nums 中 最小 元素可以整除 numsDivide 中所有元素的 最少 删除次数。如果无法得到这样的元素&a…

【Kotlin】select简介

1 前言 协程的 select 是一种用于异步操作的选择器&#xff0c;它允许同时等待多个挂起函数的结果&#xff0c;并在其中一个完成时执行相应的操作。 能够被 select 的事件都是 SelectClause&#xff0c;在 select.kt 中有定义&#xff0c;如下。 public interface SelectBuild…