[Qt]信号和槽机制

article/2025/10/1 12:23:29

信号和槽机制

目录

信号和槽机制

前言:

1.系统自带的信号和槽

代码实现:

如何查找系统自带的信号和槽(如何使用帮助文档)

2.自定义信号和槽

(1)创建Teacher类和Student类

(2)自定义信号:

(3)自定义槽函数:

(4)自定义信号&自定义槽函数的连接

3.重载的自定义信号&槽发生重载的解决

QString 转成 char *

4.信号连接信号

5.Qt4版本信号槽连接

拓展

Qt4版本写法

前言:

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

1.系统自带的信号和槽


前提条件:创建了窗口,窗口内包含按钮 需求(功能):通过点击按钮将窗口关闭   

实现:  connet(信号发送者,信号(地址),信号接受者,槽函数(地址))     

信号格式: &信号发送者所属类::信号   其中信号为系统为信号所属类创建的系统信号  

槽函数格式: &信号接受者所属类别::信号接受者处理信号的槽函数  其中槽函数为系统为信号接收者所属类创建的系统信号

代码实现:

//connect()函数最常用的一般形式:
connect(sender, signal, receiver, slot);
//第一行代码创建一个关闭按钮
//第二行就是信号槽的使用方式
QPushButton * quitBtn = new QPushButton("关闭窗口",this);
connect(quitBtn,&QPushButton::clicked,this,&MyWidget::close)


如何查找系统自带的信号和槽(如何使用帮助文档)

在帮助文档中输入QPushButton,首先我们可以在Contents中寻找关键字 signals,信号的意思,但是我们发现并没有找到,这时候我们应该想到也许这个信号的被父类继承下来的,因此我们去他的父类QAbstractButton中就可以找到该关键字,点击signals索引到系统自带的信号有如下几个

这里的clicked就是我们要找到,槽函数的寻找方式和信号一样,只不过他的关键字是slot。


2.自定义信号和槽

使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。

(1)创建Teacher类和Student类

(2)自定义信号:

写在头文件中类的signals里面;信号返回值为void类型;信号只需要声明不需要实现;可以有参数,可以重载

(3)自定义槽函数:

写在头文件的类的public slots里面或者写在public 或者全局下;返回值为void类型;需要声明也需要实现;可以有参数,可以重载

(4)自定义信号&自定义槽函数的连接

在窗口中, 使用槽函数和信号:首先创建信号发送者和信号接受者;然后通过connect建立连接;最后使用emit关键字触发信号,信号将通过连接传给信号接受者启动槽函数(头文件和源文件的相关代码)

在窗口中声明一个公共方法下课,这个方法的调用会触发老师饿了这个信号,而响应槽函数学生请客

3.重载的自定义信号&槽发生重载的解决

1.需要利用函数指针 明确指向函数的地址
2.void( Teacher:: * tSignal )( QString ) =&Teacher::hungry;
3.QString 转成  char *     3.1.ToUtf8() 转为 QByteArray3.2.Data() 转为 Char *

使用有参的槽函数和信号:需要明确(重载)信号和(重载)槽函数的地址:例 void (Teacher::teacherSignal )(QString)=&Teacher::hungry---------》代表参数为QString的重载函数的地址   代码:connect(信号发送者,有参信号(地址),信号接受者,有参槽函数(地址))

QString 转成 char *

4.信号连接信号

代码:connect(信号发送者,信号(地址),信号接受者,信号(地址))   流程:一个按钮点击信号——>触发第一个连接的信号——>该信号触发另一个连接的槽函数

断开信号:

5.Qt4版本信号槽连接

拓展

(1)一个信号可以和多个槽相连

如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。

(2)多个信号可以连接到一个槽

只要任意一个信号发出,这个槽就会被调用。

(3)一个信号可以连接到另外的一个信号

当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。

(4)槽可以被取消链接

这种情况并不经常出现,因为当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽。

(5)信号槽可以断开 利用disconnect关键字是可以断开信号槽的

Qt4版本写法

connect(zt,SIGNAL(hungry(QString)),st,SLOT(treat(QString)));

这里使用了*SIGNAL和SLOT这两个宏,将两个函数名转换成了字符串*。注意到connect()函数的 signal 和 slot 都是接受字符串,一旦出现连接不成功的情况,Qt4是没有编译错误的(因为一切都是字符串,编译期是不检查字符串是否匹配),而是在运行时给出错误。这无疑会增加程序的不稳定性。

Qt5在语法上完全兼容Qt4,而反之是不可以的。

6.信号和槽的小结

​​​​​​​

 


http://chatgpt.dhexx.cn/article/6txnGFKV.shtml

相关文章

Qt信号与槽机制原理及优缺点

信号和插槽用于对象之间的通信。信号和槽机制是Qt的核心特性,可能也是与其他框架提供的特性最大不同的部分。Qt的元对象系统使信号和插槽成为可能。 作为一个C/C程序员来说 回调应该属于深入人心的机制了。其他工具包使用回调来实现这种通信。回调函数是一个指向函…

QT多线程下的信号与槽机制

目录 1、QThread类 2、创建并启动线程 3、多线程信号与槽 4、信号与槽的调用线程? 5、调整信号与槽所在线程的依附关系 6、信号与槽的连接方式 QT 中 QObject 作QT中类的最终父类,具有自定义信号与槽的能力,只要继承自这个类的类&#xf…

QT—信号与槽详解

目录 一、什么是信号与槽 二、信号与槽的添加 1.添加槽方法 2.添加信号 3.发送信号 4.信号与槽连接 三、连接类型 1.一对一 2.一对多 3.多对一 四、信号与槽断开连接 1.断开一个对象的所有信号关联 2.断开指定信号的所有关联 3.断开指定接收者的所有关联 4.断…

Qt的信号与槽

引入 在GUI编程中,组件组件如何实现通信是核心的技术内容。 Qt使用了信号与槽的机制,为此Qt引入了一些关键字slots、signals、emit,这些都是Qt特有的关键字,然后这些关键字会被Qt的moc转换位标准的C语句。 Qt 的部件类中有一些已…

Linux下的QT信号和槽机制(二)

目录 1.基本知识点 2.信号机制 3.槽机制 4.元对象工具 5.信号和槽机制原理 (1)信号和槽机制 (2)信号和槽函数的关联 (3)信号和槽的断开 (4)信号和槽的优点 (5&…

Qt信号与槽原理

Qt信号与槽原理 本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇) 本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址: https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q 《C语法详解》网盘地址&#…

Qt 之 信号槽机制及优缺点

1. Qt 信号槽机制 概念: 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是…

【Qt】一篇全面的信号和槽函数机制总结

信号和槽函数机制 文章目录 信号和槽函数机制一、信号和槽机制简介二、【信号】(2-1)信号的发出(2-2)信号的处理 三、【槽函数】(3-1)带有默认参数的信号和槽函数(3-2)使用QObject::…

Qt: 信号与槽机制

一、信号和槽机制是什么? 1 Qt信号槽机制:是Qt的核心机制,它是Qt定义的一种对象间的通讯机制,且独立于标准C/C语言。 2 信号(signals):当某个类对象发生内部改变时,发射“信号”随后与关联的“槽…

Qt 信号和槽的机制(逻辑清晰的来说清楚信号和槽,呕心沥血之作)

Qt 信号和槽的机制 首先说声对不起,上次在PyQt5中写信号与槽,由于时间原因没有写完。有小伙伴留言说,希望把这章补全。所以,这是一篇迟来的文章,再次向大家说声抱歉。 一、桌面程序的结构 Qt的使用场景,…

Qt信号和槽机制emit的使用

1.相关概念: [1].信号(Signal)就是在特定情况下被发射的事件 [2].槽(Slot)就是对信号响应的函数。槽就是一个函数 [3].信号与槽之间的关联:是用 QObject::connect() 函数实现的,其基本格式是…

Qt信号和槽机制详解

Qt信号和槽机制详解 信号和槽是 Qt 特有的消息传输机制,它能将相互独立的控件关联起来。 举个简单的例子,按钮和窗口本是两个独立的控件,点击按钮并不会对窗口造成任何影响。通过信号和槽机制,我们可以将按钮和窗口关联起来&…

Qt信号与槽机制

一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起&…

Qt --- 信号与槽

信号与槽概述 信号与槽是 Qt 框架引以为豪的机制之一。所谓信号与槽,实际就是观察者模式(发布-订阅模式)。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没…

Qt中的信号和槽详解

一、背景介绍 信号和槽用于两个对象之间的通信。信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出特征。在GUI编程中,当改变了一个部件时,总希望其他部件也能了解到该变化。更一般来说,我们希望任何对象都可以和其他…

QT笔记(一)

学习目标: 总结学习的QT 学习内容: 1、 QT的一些固定格式 2、 控件和事件 3、 信号和槽 记录内容: 1、 QT的固定格式 (1) 引用头文件 自己创建的头文件用" "括起,eg: #include "mainwindow.h"QT提供的头文…

QT中信号和槽详解

一、QT中信号和槽的机制 1、贴图来理解信号和槽的关系 2、解释 (1)信号和槽是用于QT对象之间的通信,信号可以有某种动作触发,也可以直接由代码触发。 (2)槽也叫操函数,当完成了信号和槽的连接…

Qt核心特性之 —— 「信号(Signal)与槽(Slot)」机制

目录 1、Qt 与 Qt Creator简介: 2、关于引用头文件的一些事儿: 3、信号(Signal)与槽(Slot)机制: 3.1、一个小例子: 4、自定义信号与槽: 4.1、运行效果: 5、信号与槽的特性: 6、Qt 4…

三张图搞定TCP 握手、HTTPS、TLS加密过程

1. 抓包内容(WireShark) 2. 搞定握手、挥手、SSL加密过程 3. 消息内容(Charles) 之前看到写的比较好的文章,有文字详细叙述: TLS版本差异 https://zhuanlan.zhihu.com/p/27524995?utm_source协议解析 htt…

TCP三次握手学习心得

客户端A若要连接服务端B,首先A会向B发送一个连接请求,其中SYN1,ACK0,B为了告诉A成功收到了消息,则向A发送一个确认包,其中SYN1,ACK1,这时A收到之后又会向B发送一个确认收到确认包的确认包,SYN0,…