qt 信号和槽

本文详细介绍了Qt中的坐标系统,以及信号槽的连接方式,强调了explicit关键字在构造函数中的作用。还探讨了自定义信号和槽函数的声明与实现,以及多态和继承在类设计中的应用,以教室师生互动为例,展示了如何通过信号槽机制处理事件。
摘要由CSDN通过智能技术生成

qt中的坐标系:左上角(0,0)x向右增加,y向下增加

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

connect (信号的发送者,发送的具体信号,信号的接受者,信号的处理槽)

信号槽的优点,松散耦合,信号发送端和接收端本身没有关联,通过connnect连接,将两端耦合在一起

signals:click 点击 press按下 release 释放 toggled切换(开/关,布尔值) slot槽 emit 触发关键字

 

//参数1 信号的发送者,参数2 发送的信号(函数的地址),参数3 信号的接受者,参数4 处理的槽函数(函数的地址)

   connect(myBtn,&MyPushButton::clicked,this,&myWidget::close);
   connect(myBtn,&QPushButton::clicked,this,&QWidget::close);

C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).

//构造函数是类的同名成员函数,没有返回值,当实例化对象时它会自动执行,一般负责对类进行初始化,分配资源
//构造函数必须是public,否则无法实例化对象
//构造函数可以重载,可以有多个版本
//带参数的构造函数的调用方法:
//类名 对象名(实参);
//类名 *对象指针=new 类名(实参);
//默认情况下编译器会自动生成一个无参构造函数
//构造函数没有返回值
//初始化列表只能在构造函数中使用
//继承是指一个类可以从另一个类继承属性和方法。多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的结果

explicit关键字的作用是防止类构造函数的隐式自动转换.

explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了

但是, 也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数。

#include "widget.h"
#include "ui_widget.h"

//Teacher类 老师类
//Student类 学生类
//下课后,老师会触发一个信号,饿了,学生响应信号,请客吃饭
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建一个老师对象
    this->zt = new Teacher(this);

    //创建一个学生对象
    this->hyx = new Student(this);

    //老师饿了 学生请客的连接
    connect(zt,&Teacher::hungry,hyx,&Student::treat);

    //调用下课函数
    classisover();//连接和调用有先后顺序
}

    void Widget::classisover()
{
        //下课函数,调用后,触发老师饿了的信号
        emit zt->hungry();

}
Widget::~Widget()
{
    delete ui;
}

总结:

自定义信号

写到signals下

返回void

需要声明,不需要实现

可以有参数,可以重载

自定义槽函数

返回void

需要声明,也需要实现

可以有参数,可以重载

写到public slot下或者public 或者全局函数

触发自定义信号

案例:下课后,老师触发饿了信号,学生响应信号,请客吃饭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值