C++Qt学习——Qt信号槽

本文介绍了如何在Qt中使用信号槽进行界面组件交互,包括创建UI、连接信号click()到槽函数、自定义信号槽以及多路连接的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号和槽是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();

运行不报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值