信号和槽-点击按钮关闭窗口,自定义信号和槽

如果我们要实现一个需求,点击按钮关闭窗口,怎么实现呢。就要用到信号和槽的概念。
原本按钮和窗口是没有关联的,但是我们通过一个槽函数连连接他们。比如

按钮—点击----窗口-----关闭。

所以我们需要一个函数connect,意思就是把信号的发送者和接受者链接起来,就可以完成需求。

connect的参数是
1、信号发送者(按钮,具体的信号(比如clicked点击)信号接受者(窗口),槽函数(比如关闭)。
connect(btn1,&QPushButton::clicked,this,&mywidget::close);

前面的信号clicked,槽函数close都是系统有的,如何实现自定义的信号和槽呢?
比如实现下面这个需求:
下课后,老师饿了,学生在debug栏输出请吃饭。
这里,对象是学生和老师,所以需要创建这两个对象,而且这两个对象父类可以是QObject,因为不一定是窗口的子类。
然后信号发送者是老师,信号是饿了(要用下课这个触发信号),然后接受者是学生,槽函数是输出请老师吃饭。

注意以下,信号只需要声明没有返回值,不需要定义,槽函数要声明也要定义。在学生头文件声明槽函数treat(),cpp文件定义槽函数treat().老师的头文件只需要声明hungry是个信号。
另外,classisover()要在建立连接后面,因为连接一直存在的,一直在等信号的触发,不然的话没有作用,因为没有连接函数。
在这里插入图片描述

里面之所以写this->zx,this->st,是因为我把zx,zt的声明写在widget头文件里面了,teacher *zx,student *st.
也可以在cpp里面直接定义初始化。比如下面
teacher * zx=new teacher(this);只不过要注意把老师学生两个类的头文件包括进去。
另外,classover函数不能再用了,直接在连接函数后面写emit zx->hungry().
因为之前我们把zx,st都作为widget的私有成员变量了,所以可以在widget::classover()里面用zx,现在用的话会报错zx没有定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值