当前位置:网站首页>QT5 之信号与槽机制(信号与槽的基本介绍)
QT5 之信号与槽机制(信号与槽的基本介绍)
2022-06-27 15:34:00 【华为云】
QT5 之信号与槽机制
1.1 什么是信号和槽
信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。
信号和槽用于对象间的通讯,信号/槽机制是Qt的一个核心特征。
在图形用户界面编程中,我们经常通过信号槽将一个窗口部件的一个变化通知给另一个窗口部件。
• 信号
当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
• 槽
用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制。
• 信号与槽的连接
所有从 QObject 或其子类 ( 例如 Qwidget ) 派生的类都能够包含信号和槽。因为信号与槽的连接是通过 QObject 的 connect() 成员函数来实现的。
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。
• 特点
一个信号可以连接多个槽
当信号发射时,会以不确定的顺序一个接一个的调用各个槽。
多个信号可以连接同一个槽
即无论是哪一个信号被发射,都会调用这个槽。
信号直接可以相互连接
发射第一个信号时,也可以发射第二个信号。
• 应注意的问题
1. 信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也有可能产生死循环。因此,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发射所接收到的同样信号。例如 , 在前面给出的例子中如果在 mySlot() 槽函数中加上语句 emit mySignal() 即可形成死循环。
2. 如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。
3. 宏定义不能用在 signal 和 slot 的参数中。
4. 信号和槽的参数个数与类型必须一致。
1.2 信号与槽的示例程序
1.2.1手动关联
1. 将按钮的点击信号,关联到对应的槽函数。
connect(ui->pushButton_delete_server,SIGNAL(clicked()),this,SLOT(slot_delete_Server())); |
参数解析:
ui->pushButton_delete_server :信号源对象
SIGNAL(clicked()):信号源发出的信号
This:接收端的对象
SLOT(slot_delete_Server()):接收端的槽函数
1.2.2 自动关联
.png)
1.3 自定义信号槽
1.3.1 定义自己的信号和槽函数
自定义的信号和槽函数都需要在类体类定义!
示例代码:
/*继承与TCP服务器*/ classtcp_server:publicQTcpServer { publicslots://自定义槽函数 voidtcp_server_slot_RXdata(QStringstr,intlen); signals: /*声明自定义信号*/ voidTcp_Server_Signal(QStringstr,intlen);//在文本框显示收到的数据 }; |
注意:信号和槽函数可以有新参,但是不能有返回值!
1.3.2 发送自定义信号
示例代码:
voidtcp_server::tcp_server_slot_RXdata(QStringstr,intlen) { emitTcp_Server_Signal(str,len);//发送信号 } |
emit关键字用来发送信号!
语法:
emit信号;
1.4 两个类之间的信号通讯
如果要实现B类访问A类的数据,定义信号的和槽的方法!
步骤:
1. 在A类定义一个槽函数。
2. 在B类定义一个信号。
3. 在A类的成员函数里关联信号与槽!
connect(B类的对象指针,SIGNAL(B类的信号)),A类的对象指针,SLOT(A类的槽函数)); |
4. 在B类的成员函数发送定义的信号
emit 信号函数; |
5. B类发送信号之后,A类的槽函数将会得到相应!!
边栏推荐
- Google Earth Engine(GEE)——Export. image. The difference and mixing of toasset/todrive, correctly export classification sample data to asset assets and references
- 【Pygame小遊戲】這款“吃掉一切”遊戲簡直奇葩了?通通都吃掉嘛?(附源碼免費領)
- 基于 Nebula Graph 构建百亿关系知识图谱实践
- A distribution fission activity is more than just a circle of friends!
- The array of C language is a parameter to pass a pointer
- The interview lasted for half a year. Last month, I successfully got Alibaba p7offer. It was all because I chewed the latest interview questions in 2020!
- 目前PolarDB-X是不支持数据库自制服务DAS么?
- [MySQL] query valid data based on time
- ICML 2022 | 阿⾥达摩院最新FEDformer,⻓程时序预测全⾯超越SOTA
- Leetcode daily practice (longest substring without repeated characters)
猜你喜欢

PSS: vous n'êtes qu'à deux niveaux du NMS Free + Lifting point | 2021 Paper

Mobile terminal click penetration

鴻蒙發力!HDD杭州站·線下沙龍邀您共建生態
![[pygame Games] ce jeu](/img/3c/e573106ec91441a554cba18d5b2253.png)
[pygame Games] ce jeu "eat Everything" est fantastique? Tu manges tout? (avec code source gratuit)

Eolink launched a support program for small and medium-sized enterprises and start-ups to empower enterprises!

ICML 2022 ぷ the latest fedformer of the Dharma Institute of Afghanistan ⻓ surpasses SOTA in the whole process of time series prediction

洛谷入门2【分支结构】题单题解

3.2 multiple condition judgment

面试半年,上个月成功拿到阿里P7offer,全靠我啃烂了这份2020最新面试题!

Domain name binding dynamic IP best practices
随机推荐
Introduce you to ldbc SNB, a powerful tool for database performance and scenario testing
Markdown syntax
ORM表关系及操作
设计原则和思想:设计原则
洛谷入门2【分支结构】题单题解
Distributed session solution
Difference between special invoice and ordinary invoice
The latest development course of grain college in 2022: 8 - foreground login function
Practice of constructing ten billion relationship knowledge map based on Nebula graph
PSS: you are only two convolution layers away from the NMS free+ point | 2021 paper
Weekly snapshot of substrate technology 20220411
Design of CAN bus controller based on FPGA (with main codes)
Typescript learning materials
Taishan Office Technology Lecture: the first difficulty is vertical positioning
熊市慢慢,Bit.Store提供稳定Staking产品助你穿越牛熊
分布式Session解决方案
New method of cross domain image measurement style relevance: paper interpretation and code practice
Sigkdd22 | graph generalization framework of graph neural network under the paradigm of "pre training, prompting and fine tuning"
防火墙基础之源NAT地址转换和服务器映射web页面配置
基于 Nebula Graph 构建百亿关系知识图谱实践