自定义信号和槽
为什么要使用自定义信号和槽
QT内置了大量的信号和槽(观察者的处理函数),但是在某些情况下,还是不能满足我们的需求,但其支持自定义槽,为我们提供了方便。比如说,在第一次的案例中写到,要在输出窗口打印文字,QT没有提供这一机制,我们就使用了lambda表达式。
在这一节中,我们就可以自定义信号和槽,来实现这一问题。、
自定义槽的要求
- 是一个函数,有声明且有实现
- 无返回值类型
- 槽函数可以带参,可以重载(参数从信号获取)
自定义信号的要求
- 自定义信号
- 写在signal:下
- 只需声明,无需实现
- 返回值为void
- 支持带参,且可以重载
自定义信号和槽的特点
- 一个信号可以被多个槽函数绑定
- 同一个槽函数可以绑定多个信号
- 信号 和 槽 函数参数列表要一一对应
- 信号的参数可以多于槽函数的参数
- 槽函数的参数表不能多余信号的参数表
- 信号可以绑定信号
信号和槽断开链接
disconnect用法和connect一样
练习1

#include "Widget.h"
#include "ui_widget.h"
#include "Boss.h"
#include <QPushButton>
#include <QtDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//点击按钮,处理boss死亡槽函数
//观察者 boss 处理函数 死亡打印
//被观察则 按钮 信号 点击
//按钮点击 处理boss死亡
auto boss1 = new Boss("小白",2000,this);
auto btn = new QPushButton("死亡按钮",this);
//boss->move(0,100);
connect(btn,&QPushButton::clicked,boss1,&Boss::BossDeadSlot);
}
Widget::~Widget()
{
delete ui;
}


结果

版权声明:本文为qq_44423388原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。