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 或者全局函数
触发自定义信号
案例:下课后,老师触发饿了信号,学生响应信号,请客吃饭