QT从入门到实战学习笔记
- 一、QPushButton的创建
- 二、中文要设置成UTF-8格式才不会乱码
- 三、对象树
- 1、验证被释放掉
- 四、QT窗口坐标系
- 九、信号和槽---点击按钮关闭窗口
- 1、查询signal信号的定义(帮助文档)
- 2、搜索QWidget查找槽函数(slot是槽的意思)
- 五、自定义信号和槽
- 1、要求
- 2、创建Teacher和Student类
- 3、在窗口中定义Teacher对象和Student对象,并定义一个classIsOver()来表示下课了,触发hunger()信号
- 六、自定义的信号和槽发生重载的解决
- 1、进行重载
- 2、改变链接(connect)
- 3、QString转换成char *方法
- 七、信号连接信号
- 八、QT4版本信号槽连接
- 1、拓展
- 2、QT4版本以前的信号和槽连接方式
- 九、Lambda表达式
- 十、信号槽的总结
一、QPushButton的创建
QPushButton Class中:
其中Header表示所要引的头文件
Qmake表示所需要的模块
Inherits表示它的父类是:QAbstractButton
点击QAbstractButton可以看QAbstractButton的父类
Inherited By是子类:QCommandLinkButton
Public Function中:构造函数
#include "mymainwindow.h"
#include<QPushButton> //按钮控件的头文件
myMainWindow::myMainWindow(QWidget *parent) //默认函数值在头文件里和原文件里只有一个存在默认值,这里是一个构造函数的意思,主要是对对象parent初始化,这里继承了父类的默认值0
: QWidget(parent)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
//btn->show(); //端口默认不显示,所以要show一下,show()的方式是默认用顶层的弹出窗口控件
//让btn对象 依赖在myWidgt窗口中
btn->setParent(this); //设置父类
//显示文本
btn->setText("第一个按钮");
//创建第二个按钮,弊端:按照控件的大小来创建的窗口
QPushButton * btn2 = new QPushButton("第二个按钮",this); //这里要是不new就直接执行析构函数了
//移动btn2按钮,因为把btn按钮覆盖了
btn2->move(100,100);
//按钮可不可以,重新制定大小
btn2->resize(50,50);
//重置窗口的大小
resize(600,400);
//设置固定窗口大小
setFixedSize(600,400);
//设置窗口标题
setWindowTitle("第一个窗口");
}
myMainWindow::~myMainWindow()
{
}
二、中文要设置成UTF-8格式才不会乱码
在工具选项中
选择文本编辑器件,默认编码选择UTF-8
三、对象树
构造是从上往下,析构是从下往上释放
只要指定为父亲他都会把你释放掉
1、验证被释放掉
右键文件夹,点击Add New…(新建文件)
选中C++ Class
创建名为MyPushButton
父类选择QWidget
点击下一步
点击完成
建立成功
父类改成QPushButton
设置QDebug调试模式
修改mymainwindow.cpp文件设置pushbutton为子类
运行程序,首先出现我的按钮构造类
关掉窗口后,先访问父类,再访问子类,然后析构释放子类,再释放父类
四、QT窗口坐标系
九、信号和槽—点击按钮关闭窗口
1、查询signal信号的定义(帮助文档)
先搜索QPushButton类,查询里面内容
发现signals相关,其中4个继承与父类QAbstractButton
3个继承与父类QWidget
2个继承与父类QObject
点开父类进行观看
有四个信号,第一个是点击
第二个摁下
第三个释放
第四个切换(比如摁一下就开,摁一下就关)这个是有一个状态
2、搜索QWidget查找槽函数(slot是槽的意思)
找到槽函数
点击close,有介绍
这种有小凹槽的都是槽函数
运行后点击我的按钮确实界面被关闭了。
五、自定义信号和槽
1、要求
创建类,其中QObject是最全的控件,有这个我们就可以不用去管释放的问题。
2、创建Teacher和Student类
Teacher类作为信号的发送者,定义了一个hungry信号
Student类作为信号的接受者,写一个槽为treat()
3、在窗口中定义Teacher对象和Student对象,并定义一个classIsOver()来表示下课了,触发hunger()信号
六、自定义的信号和槽发生重载的解决
1、进行重载
重载后出现2个hungry
此时之前的connect就不能用了,得改变
2、改变链接(connect)
void(Teacher:: * teacherSignal)(QString) = &Teacher::hungry;
void(Student:: * studentSlot)(QString) = &Student::treat;
进行变量参数设置
改变触发信号设置
3、QString转换成char *方法
可以查找帮助文档中的QByteArray
查看所要转换成的数据类型
七、信号连接信号
可以如上上图信号连接信号,也可以断开信号
八、QT4版本信号槽连接
1、拓展
(1、信号可以连接信号
(2、一个信号可以连接多个槽函数
(3、多个信号可以连接同一个槽函数
(4、信号和槽的参数,必须类型一一对应
(5、信号和槽的参数个数,是不是要一致?信号的参数个数 可以多于槽参数的个数
2、QT4版本以前的信号和槽连接方式
QT4的信号槽连接无参的版本
connect(zt,SIGNAL(hungry()),std,SLOT(treat()));
QT4版本优点,参数直观,缺点:类型不做检测
QT5以上支持QT4的写法,反之不支持
九、Lambda表达式
&{
btn->setText(“aaaa”);
btn2->setText(“bbbb”);
}();
其中尾巴的()前面的代码是一个函数声明,带上尾巴()才是函数调用
其中m只在它那个语句中改变
一般用=值函数传递