当前位置: 首页 > 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.lryc.cn/news/584876.html

相关文章:

  • 基于vscode开发工具显示git提交信息的插件
  • Web3.0 支付网络对企业的优势
  • Linux磁盘限速(Ubuntu24实测)
  • spark3 streaming 读kafka写es
  • 可以悬浮在Windows电脑桌面的好用便签软件评测
  • 前端开发—全栈开发
  • php use 命名空间与 spl_autoload_register的关系
  • DVWA靶场通关笔记-反射型XSS(Reflected Low级别)
  • uni-app获取手机当前连接的WIFI名称
  • 小皮面板搭建pikachu
  • 如何将文件从OPPO手机传输到电脑
  • GNhao,获取跨境手机SIM卡跨境通信新选择!
  • 手机恢复出厂设置怎么找回数据?Aiseesoft FoneLab for Android数据恢复工具分享
  • 【Python3教程】Python3高级篇之CGI编程
  • linux系统-----Redis主从复制
  • Hadoop 用户入门指南:驾驭大数据的力量
  • 传输层协议UDP原理
  • 【数据库基础 1】MySQL环境部署及基本操作
  • 工作间期休息一下
  • 重振索尼复古微型电脑——计划以OrangePi CM5 作为主板升级
  • php 如何通过mysqli操作数据库?
  • 平板柔光屏与镜面屏的区别有哪些?技术原理与适用场景全解析
  • Linux操作系统从入门到实战:怎么查看,删除,更新本地的软件镜像源
  • Linux权限的概念
  • 一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答(附教程)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • Linux:多线程---同步生产者消费者模型
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 【前端】【Echarts】【zrender】从入门到多路径信号流动动画实战
  • 飞算JavaAI:革新Java开发的智能助手