Qt学习日志2021_08_20
对象树
对象树的结构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozg2dtZH-1629554674535)(C:\Users\72408\AppData\Roaming\Typora\typora-user-images\image-20210821160153090.png)]
- 当创建的对象在堆区,如果指定的父亲是QObject的派生下来的类或者QObject的子类派生下来的类,可以不用管理释放发操作,会将对象放到对象树中。
- 一定程度上简化了内存回收机制。
Qt的坐标系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7PxN9t4-1629554674536)(D:\java_learn\Qt学习日志2021_08_21.assets\image-20210821161905942.png)]
btn->setText("第一个按钮");
btn->move(250,200);
信号和槽
- 参数
connect(信号的发送者,发送的具体信号的地址,信号的接受者,信号处理的槽函数)
-
松散耦合
-
connect(myBtn, &MyPushButton::clicked, this, &My_Widget::close);
自定义信号和槽
- 自定义信号
-
- 写到signal下
- 返回void
- 需要声明,不需要实现
- 可以有参数,可以重载
- 槽函数
-
- 返回void
- 需要声明,也需要实现
- 可以有参数,可以重载
- 写到public slot下或者public 或者全局函数
信号链接信号
//点击按钮,触发请吃饭
QPushButton * btn = new QPushButton("吃饭!!!!",this);
this->resize(200,200);
//点击按钮
connect(btn, & QPushButton::clicked, this, &Widget::ClassOver);
//断开信号 断掉了之后就没法响应了
//disconnect(st,studentSignal, zt, teacherSlot);
//1.信号是可以连接信号的
//2.一个信号可以连接多个槽函数
//3.多个信号可以连接同一个槽函数
//4.信号和槽函数的类型必须一一对应
//5.信号和槽的参数个数 是否要一致? 是可以的。 信号的参数可以比槽函数的多
//Qt4版本以前的信号和槽连接方式
connect(st, SIGNAL(hungry()),zt, SLOT(treat()));
//缺点: 类型不做检测 如果出错了,查不出来,不方便
Lambda表达式
[],表示一个Lambda的开始,这部分必须存在,不能省略
- 空,没有任何函数对象参数
- =, 函数体内可以使用所在范围内所有课件的局部变量,值传递方式
- &,同上,但是是引用传递方式
- this,跟“=”一样的
- a, 将a的方式值传递。 其他的参数都看不到
- &a,将a用引用方式传递
- a ,&b : a用值传递,b用引用传递
mutable
加了这个关键字之后,修改里面的参数,只修改拷贝,不会修改本体。
而不加这个关键字就不能修改。
return返回值
//利用Lambda表达式,实现点击按钮,关闭窗口
QPushButton * btn3 = new QPushButton(this);
btn3->setText("Close");
btn3->move(150,0);
connect(btn3, &QPushButton::clicked,this, [=](){this->close();st->hungry("可乐鸡翅");});
int ret = []()->int{return 1000;}();
qDebug() << "ret=" <<ret;