信号和槽是Qt编程的基础,他们的存在使得在Qt中处理界面各个组件的交互操作变得更加直观简单。
信号(SUGNAL):也就是发送者发送的函数信号,例如PushButtun最常见的信号就是鼠标单击的时候发射的click()信号
槽(SLOT):也就是说接收者对信号响应的函数,槽也是一个函数。
用一个生活中的例子就是:
目录
1、使用Qt的信号槽
1.1、新建一个UI文件
1.2、双击进入mainwindow.ui
1.3、在ui界面拖入一个PushButtun
1.4、双击修改按钮名称,并修改字体大小
1.5、设置按键位置和大小
1.6、将按钮当作发送者(对象),mainwindow当作接收者
1.7、点击Signal_Slots Edit
1.8、设置事件
方法一:先点击绿色的加号,再双击发送者,选择pushbuttun,一次选择信号为click()等。
方法二:点击左上角的信号槽连接
A、按住按钮拖出来,弹出窗口,最后点击ok。会发现会出现和方法一一样的效果
方法三:用代码写
A、选中按钮,右键转到槽
B、点击click,点击ok。跳转到MainWindow函数,写下案件触发的事件,打印必须引用
C、按键F4,跳转到声明,这是Qtcreator创建好的
D、按住ctrl+R,运行即可
2、Qt信号槽介绍
2.1、在mainwindow.cpp里面写
2.2、按住ctrl+R,运行即可
3、自定义信号槽
3.1、按住Ctrl+N,创建Student和School类
3.2、点击student.h发现已经将信号创建好了,因为我们设置的学校是发送者,所以直接在signals下直接声明函数
3.3、在student.h里面自定义槽
3.4、在mainwindow.h里面引入头文件以及class类
3.5、创建school和student的对象
3.6、在mainwindow.cpp里面实例化
3.7、连接信号槽
3.7.1、一个信号可以链接多个槽
3.7.2、多个信号可以链接同一个槽
3.7.3、 一个信号可以链接另外一个信号
1、使用Qt的信号槽
1.1、新建一个UI文件
1.2、双击进入mainwindow.ui
1.3、在ui界面拖入一个PushButtun
1.4、双击修改按钮名称,并修改字体大小
1.5、设置按键位置和大小
1.6、将按钮当作发送者(对象),mainwindow当作接收者
1.7、点击Signal_Slots Edit
1.8、设置事件
方法一:先点击绿色的加号,再双击发送者,选择pushbuttun,一次选择信号为click()等。
那么这个就是点击按钮主窗口关闭
方法二:点击左上角的信号槽连接
A、按住按钮拖出来,弹出窗口,最后点击ok。会发现会出现和方法一一样的效果
方法三:用代码写
A、选中按钮,右键转到槽
B、点击click,点击ok。跳转到MainWindow函数,写下案件触发的事件,打印必须引用
#include <QDebug>
C、按键F4,跳转到声明,这是Qtcreator创建好的
D、按住ctrl+R,运行即可
2、Qt信号槽介绍
信号与槽关联是用QObject::connect()函数来实现的,基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
在应用中,OBject是所有Qt类的基类,因此可以将上面的话换成
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
2.1、在mainwindow.cpp里面写
this就是MainWindow,主窗口
2.2、按住ctrl+R,运行即可
3、自定义信号槽
3.1、按住Ctrl+N,创建Student和School类
3.2、点击student.h发现已经将信号创建好了,因为我们设置的学校是发送者,所以直接在signals下直接声明函数
3.3、在student.h里面自定义槽
定义函数
3.4、在mainwindow.h里面引入头文件以及class类
3.5、创建school和student的对象
3.6、在mainwindow.cpp里面实例化
3.7、连接信号槽
3.7.1、一个信号可以链接多个槽
connect(school, SIGNAL(sendMessages()), student, SLOT(comeBackToClass()));
connect(school, SIGNAL(sendMessages()), this, SLOT(hide()));
运行不报错
3.7.2、多个信号可以链接同一个槽
connect(school, SIGNAL(sendMessages2()), student, SLOT(comeBackToClass()));
connect(school, SIGNAL(sendMessages2()), student, SLOT(close()));
运行不报错
3.7.3、 一个信号可以链接另外一个信号
emit:发送信号的关键字
connect(school, SIGNAL(sendMessages2()), student, SIGNAL(iconSizeChanged()));
emit school->sendMessages();
运行不报错