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

学习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.xdnf.cn/news/15220.html

相关文章:

  • JavaAI时代:重塑企业级智能开发新范式
  • 秋招小白学数据结构-1-数据结构前置知识
  • 面向构件的编程(COP)深度解析:构建模块化系统的工程范式
  • Linux_3:进程间通信
  • (六)复习(OutBox Message)
  • 游戏的程序员会不会偷偷改自己账号的数据?
  • C++迭代器失效
  • 数据结构 顺序表(3)---顺序表的应用
  • 计算机基础:内存模型
  • 深入理解JVM的垃圾收集(GC)机制
  • 【U-Boot】Shell指令
  • 今日行情明日机会——20250711
  • 运行ssh -T git@github.com报错
  • 【工具变量】全国省市区县土地出让结果公告数据(2000-2024年)
  • 限流算法
  • time_wait状态分析
  • 数据库大文件损坏后,数据恢复操作(记录)
  • windows exe爬虫:exe抓包
  • 开源“具身大脑” 实现不同机器人群体协作-RoboBrain
  • 电力分析仪的“双语对话”:CCLinkIE与Modbus TCP的无缝连接
  • ParaCAD 笔记 png 图纸标注数据集
  • 小木的机器学习日记——KNN
  • Flowable 使用遇到问题
  • 深度学习×第8卷:优化器与训练流程进阶——她开始跑起来,学着一次次修正自己
  • 大模型及agent开发6 OpenAI Assistant API 高阶应用 - 流式输出功能
  • pytorch的介绍以及张量的创建
  • css——width: fit-content 宽度、自适应
  • Express + @vladmandic/face-api + mySql 实现人脸识别
  • 深度学习篇---松科TPU部署代码分析
  • excel如何只保留前几行