QT 信号与槽

QT核心便是信号与槽,通过信号将数据在界面和类中,在本类和其他类中发送和接收。信号负责发送数据(也可以单纯的发送信号),槽负责接收。

系统自定义的槽

在相应组件上单机右键转到槽即可看见这列表,例如:一般按钮事件的点击(clicked),松开(released),按下(pressed)等。选择相应的槽,那么它会自动帮你做上个步骤:

1、信号注册

2、槽函数生成

3、信号与槽的绑定

如图:你选择相应的槽,那么他就会在相应的.h和。cpp文件中自动声明槽函数:

private slots 下声明的函数全是槽函数

同时也会生成空白模板的槽函数定义

自动生成的槽函数

然后你就可以在槽函数里进行自己的逻辑代码操作了默认槽函数的参数是不需要改的,因为自动发送的信号就是与参数对应的,除非要自己额外发送信号给这个槽,那么你就可以去添加自己的函数。

手动定义信号与槽

第一步:手动配置信号

直接在发送信号的对象类中用signals关键字来修饰对应的信号,信号没有返回值的,参数自定义,你想让信号传参就自己加,单纯的发信号也可无参,很随意,看需求即可。

第二步手动定义槽函数:

在接收的对象类中添加槽函数,直接声明定义即可,但需在 private slots 下声明,定义的话就自己看着写咯,

第三不关键来咯------------连接信号与槽

static\] QMetaObject::Connection QObject::connect(const QObject \*sender, const char \*signal, const QObject \*receiver, const char \*method, Qt::ConnectionType type = Qt::AutoConnection) 这是官方给的原函数,看不懂就别看,我也看的不是很懂, 总之: 意思就是 connect(发送信号这,信号,信号接收者,接收者的槽);顶多就是写的形式分为QT4的写法和QT5的写法。 QT5: connect(ui->add1,&QTextEdit::textChanged(),SLOT( mylabel_add1(ad1))); connect(ui->add2,&QTextEdit::textChanged(),SLOT( mylabel_add2(ad2))); connect(ui->add,&QPushButton::clicked(),SLOT( mybtn_add(ad1,ad2,sum)); 这就是QT5的写法就是通过类名查找信号发送者,完事后直接通过槽的名字查找槽。(不好理解) 我不是很喜欢, QT4: connect(this,SIGNAL(mysignal(QPair)),this>parentWidget(),SLOT(userinfore(QPair))); 这种虽然长点但更好理解,connect(发送信号这,信号,信号接收者,接收者的槽),这个报错一般是看不懂的QT5报错就比较好理解了; 然后,就没有然后了。就完成了。 这还一张总结的思维导图: ![](https://file.jishuzhan.net/article/1704066208338284546/d4a265d6b5024d419756102f13756e91.png)

相关推荐
無限進步D2 小时前
Java 面向对象高级 接口
java·开发语言
两年半的个人练习生^_^3 小时前
Java日志框架和使用、日志记录规范
java·开发语言·开发规范
杨凯凡3 小时前
【032】排查入门:jstack、heap dump、Arthas 初识
java·开发语言·后端
其实防守也摸鱼3 小时前
无线网络安全--实验 规避WLAN验证之发现隐藏的SSID
java·开发语言·网络·安全·web安全·智能路由器·无线网络安全
l1t3 小时前
astral-sh发布的musl和gnu版本standalone python 性能比较
开发语言·python
阿豪只会阿巴4 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——Turbo Blog 项目学习与上线指南
开发语言·python·学习·状态模式
L-影4 小时前
常见的 ORM 工具
开发语言·数据库·fastapi·orm
飞Link5 小时前
构筑你的数字第二大脑:Obsidian 深度解析与配置指南
开发语言·python
摇滚侠5 小时前
软件开发外包项目组,如何提高代码质量和开发效率
java·开发语言·前端·ide·intellij-idea