QT的信号和槽机制

概述

在这里插入图片描述

案例:单击button 关闭主窗口

widget.cpp

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //设置窗口标题
    this->setWindowTitle("信号");
    //设置窗口大小
    this->resize(800,600);
    //创建一个按钮
    QPushButton *btn1=new QPushButton("关闭",this);
    //需求:单击btn1 关闭主窗口
    //信号的发起者btn1 发出信号   主窗口this  关闭(槽函数)
    connect(btn1, &QPushButton::clicked, this, &QWidget::close);


    //lambda表达式
    QPushButton *btn2 =new QPushButton("戳我呀",this);
    btn2->move(400,300);
    connect(btn2, &QPushButton::clicked, [=](){
        //获取按钮上的文本
        QString text = btn2->text();
        qDebug()<<text <<endl;

        //设置按钮的文本
        btn2->setText("戳你咋地?");
    } );
}

注意:

1、定义信号的规则:在signals下方
返回值类型为void 只需声明 不用实现 可以有参数 可以重载
2、定义槽函数的规则:public slots:
返回值类型为void 需要声明 需要实现 可以有参数 可以重载
3、用户可以使用emit 发出信号

总结:

1、一个信号可以和多个槽相连
如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。
2、多个信号可以连接到一个槽
只要任意一个信号发出,这个槽就会被调用。
3、一个信号可以连接到另外的一个信号
当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。
4、槽可以被取消链接
这种情况并不经常出现,因为当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽。
5、Qt4版本的信号槽写法

connect(tea,SIGNAL(hungry()), stu, SLOT(treat()))

6、Qt5版本的信号槽写法

connect(tea, &Teacher::hungry, stu, &Student::treat)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值