【QT:信号和槽】

ops/2025/3/16 13:05:09/

QT信号涉及的三要素:信号源、信号类型、信号的处理方式。

QT的信号槽机制:

给按钮的点击操作关联一个处理函数,用户点击按钮时触发,对应的处理函数就会执行

QT中使用connect函数将信号和槽关联起来,信号触发,QT自动执行槽函数,槽函数的本质为“回调函数”。实例如下:

 自定义槽:

使用控件,右击鼠标,转到槽,然后选择信号

          

这里没有使用connect函数,也能让标题发生变化,是因为在QT中除了connect函数连接信号槽之外,还可以通过函数名自动连接。

自定义信号:

开发中大部分情况需要自定义槽函数,槽函数是用户触发某个操作要进行的业务逻辑。信号对应的是用户的某个操作,在 GUI中,用户操作可以穷举。

而自定义信号,程序员只需要写出函数的声明并告知QT这是一个信号,而该信号的定义则是QT在编译过程中自动生成的。

作为信号函数,函数的返回值必须是void,有无参数都可以,支持函数重载。QT中signals是QT扩展的关键字

但是建立连接并不代表信号发出来了

QT中自定义信号需要我们自己手动设置,而为什么QT中的信号不需要我们手动设置?

发射信号的代码已经内置到QT框架了,用户在GUI进行某种操作就会自动触发对应的信号

自定义信号书写实例:

  • 使用按钮控件将信号置于控件中,同样实现自动发送
  • 信号发送后,连接建立
  • 通过连接触发对应的槽函数

注意:

  1.  信号参数可以多于槽函数的参数,但是不可以少于槽函数的参数,这样的规定让信号和槽函数之间的绑定更加灵活
  2. 槽函数会按照参数的顺序拿到信号前N个参数,至少确保槽函数的每个参数都是有值的
  3. QT信号槽的机制是为了解耦合和多对多的响应
  4. 信号槽的任务本质就是响应用户的操作

信号与槽的断开:

1.使用disconnect函数断开信号槽的连接,disconnect的使用与connect相似,主动断开往往是把信号重新绑定到另一个槽函数上

用lambda表达式定义槽函数:

槽函数的定义可以使用Lambda表达式,本质是一个匿名函数吧,主要应用“回调函数”中

lambda表达式是一个回调函数,该函数无法直接获取上层作用域的变量,为了解决该问题,lambda引入了一个捕捉列表

如果当前Lambda要使用更多的外层变量,直接将[ ]中填入=即可,实例如下:

[=]的含义就是将上层作用域中所有的变量名都捕获进来,lambda语法是C++11引入的,如果使用QT4或者更老的版本需要手动在.pro文件上加C++11的编译选项,而QT5以上的版本默认按照C++11编译


http://www.ppmy.cn/ops/166208.html

相关文章

深度解析前端面试八股文:核心知识点与高效应对策略

深度解析前端面试八股文:核心知识点与高效应对策略 1. 引言 前端面试是每位开发者迈向职业进阶的重要环节,涉及 HTML、CSS、JavaScript、性能优化、浏览器原理、网络、安全、框架(Vue/React) 等核心知识点。本文不仅会覆盖 前端…

责任链模式的C++实现示例

核心思想 责任链模式是一种行为设计模式,允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递,直到某个对象处理它为止。 解决的问题 ​解耦请求发送者与处理者:请求的发送者无需知道具…

【ESP32】ESP-IDF开发 | 经典蓝牙开发 | 蓝牙串口协议(SPP) + 客户端和服务端例程

1. 简介 相信我们最早接触蓝牙,就是在某宝上买一个小巧的蓝牙模块,接到单片机上,通过AT指令进行简单配置,就可以用手机连接该模块,然后远程发送信息给单片机。这里面用到的就是SPP协议(Serial Port Protoco…

Python中很常用的100个函数整理

Python 内置函数提供了强大的工具,涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数,并配备示例代码,提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…

【2025】基于python+django的慢性病健康管理系统(源码、万字文档、图文修改、调试答疑)

系统功能结构图如下 慢性病健康管理系统 课题背景 随着全球人口老龄化的加剧以及生活方式的改变,慢性病的发病率呈上升趋势,给个人健康和社会医疗资源带来了巨大压力。传统的慢性病管理模式存在信息不畅、患者参与度低、医疗资源分配不均等问题&#xf…

如何利用物理按键控制LVGL控件的大小与状态

​ lvgl可以利用物理按键控制控件的选择和状态,演示视频如下: 单物理按键控制LVGL控件的选择和状态 移植方法如下:1 在注册设备中,填写对应的变量和初始化函数。这里我们以移keypad为例,因为keypad的功能很多。 ![请添…

使用Fluent-bit将容器标准输入和输出的日志发送到Kafka

什么是fluent-bit? Fluent Bit 是一款开源的轻量级日志处理器与转发器,专为嵌入式系统、容器化环境及分布式架构设计。其核心功能包括日志收集、过滤、聚合和传输,支持多种输入源(如文件、系统日志、HTTP接口)和输出目…

解决电脑问题(8)——网络问题

电脑网络出现问题的原因较为复杂,以下是从网络连接、网络配置以及网络环境等方面的常见问题及解决方法: 网络连接问题 检查物理连接:对于有线网络,检查网线是否插好,网线有无破损、断裂等情况。对于无线网络&#xff…