当前位置: 首页 > news >正文

学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)

每日一言

        相信自己,你比想象中更接近成功,继续勇往直前吧!

那么我们开始用这4种方法进行信号与槽的通信

第一种信号与槽的绑定方式

我们将按键右键后转到槽

会自动跳转到这个widget.h文件里面并自动生成了定义,我们要记住我们这个按钮叫做这个UIbtn,所以生成的叫做这个on_UIbtn_clicked();切记,我们这个函数名字不能自己去修改,因为这个函数的名字与我们的按钮对象的名字相同,这个是一种命名格式on_UIbtn_clicked();(on_对象名_信号名称)

这个只是声明,没有实现,所以我们也需要进行实现,右键这个声明里面有个Refactor重构,里面有个在widget.cpp添加定义,那么我们就可以实现功能了,比如以下的图

所以我们测试一下,点击这个按钮,那么就会实现弹出信息

没有问题

第二种信号与槽的绑定方式

我们要切记,这些信号与槽进行连接的代码需要在构造函数进行,实现,

这个代码是什么意思呢,ui的Connectbtn这个对象,发送的信号为clicked(),接受方为this,也就是这个窗口,SLOT里面就是接收方设置的槽函数,这个槽函数的话我们需要自己定义出来

在widget里面声明函数,自己复制过来,名字需要与我们的格式相匹配

然后也是进行实现,实现的话也是在Widget.cpp文件

然后我们返回也是可以的

第三种信号与槽的绑定方式

第三个种方式是lambda的方式,那么这个一样的方法,但是就是我们不需要进行槽函数的定义和实现了,因为我们是匿名函数嘛,但是要记住一下写法,

第四种信号与槽的绑定方式

第四种方式用函数指针的写法,我相信看语法,也会写的出来,槽函数需要自己定义和实现

自定义信号与槽

这个就厉害了,最终形态了,可以自己定义信号与自定义槽

怎么搞

首先,信号与槽也是需要用QObject: :connect 进行连接,我们先讲无参的,我们这边根据写出来的信号函数和槽函数,去widget.h去声明

一定要记住自定义信号需要写上signals:作为前缀,自定义槽函数需要public slots:这样来写,硬记都要记住,这个是没有办法的

然后我们同样也是将这个slot槽函数进行实现,右键在widget.cpp中添加实现,还有我们的信号函数是不需要实现的

我们的这个信号与槽绑定之后,我们还需要进行激活信号,也就是发送信号,那么这边有个关键词是emit  ,我们的emit 作为信号的前缀就是触发信号的作用,意思就是我们允许这个程序,后代码执行到emit这一条代码的时候就会触发信号,那么槽函数就会被调用了

那么我们运行后就会看到返回的信息了,如果看不到怎么办,而且代码也没问题怎么办??那我们就重新构建一下项目,这样就好了

那么这边还会看到这个qDebug这个东东

在 Qt 开发中,qDebug() 是一个非常重要的调试工具,它的作用类似于 C++ 中的 std::cout,但专为 Qt 环境优化。所以我们以后都要用这个qDebug进行输出数据,因为qDebug对调试Qt程序有很好的作用,后面可以用到了再详细介绍

我们想要传参数进去,怎么传

那么这边我们需要注意的点是这个信号与槽绑定的这个语句中不是填int value 了而是填int,这个要记住

旧语法(字符串)

SIGNAL(mySignal(int))

- 只写参数类型
- 运行时检查类型匹配
- 兼容性好(Qt 4/5)

新语法(函数指针)

&SenderClass::mySignal

- 写完整函数签名
- 编译时检查类型匹配
- 更安全,推荐使用

当前的代码使用的是旧语法,所以只需要填 int这个参数类型就好了

http://www.dtcms.com/a/274801.html

相关文章:

  • 动力系统模拟与推导-AI云计算数值分析和代码验证
  • BLE低功耗设计:从广播模式到连接参数优化的全链路分析与真题解析
  • Django母婴商城项目实践(一)
  • 【JMeter】接口加密
  • 蜗轮丝杆升降机拆装图
  • 在多个DHCP服务器的网络环境中选择指定的DHCP服务
  • Windows GNU Radio避坑
  • 深入探究编程拷贝
  • mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
  • Vue 表单开发避坑指南:从响应式数据到动态规则的实践总结
  • Go 编译报错排查:vendor/golang.org/x/crypto/cryptobyte/asn1 no Go source files
  • Java外包怎么选?这几点不注意,项目可能血亏!
  • day21——特殊文件:XML、Properties、以及日志框架
  • Linux中geoserver中文乱码
  • 离线环境二进制安装docker
  • uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • hbuilderx打包的应用上传苹果应用商店最简方法
  • 字节豆包又一个新功能,超级实用,4 种玩法,你肯定用得上!(建议收藏)
  • Uniapp视频聊天软件内容监控插件开发指南
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • 2-Git提交本地项目到远程仓库
  • 问有几条病狗?
  • 【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
  • 机器学习-06(Optimization-自动调整学习率)
  • consul 的安装与服务发现
  • MOSS-TTSD V2版 - 文本到语音对话生成 支持零样本多人语音克隆 一键整合包下载
  • 一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答(附教程)
  • OBB旋转框检测配置与训练全流程(基于 DOTA8 数据集)
  • 第3章 操作臂运动学(笔记总结)