1.QT基础
QT是一个框架,不用像C++语言自己从底层写,需要的功能可以先看是否QT库中有直接可使用的
帮助文档的使用:F1跳入帮助文档,
QT中常用的类:比如QPushbutton,查看帮助文档则可知道对应的函数和解决方案
2.窗口
在窗口widget中创建一个按钮pushbutton
private:
QPushButton pushbutton1; //方式1
QPushButton *pushbutton2; //方式2,常用这种
//方式2是一个指针,使用时需要new初始化,
在构造函数中实现:
//方式1
pushbutton1.setParent(this);
pushbutton1.setText("pushbutton1");
//方式2
pushbutton2 = new QPushButton("pushbutton2",this);//可F1在帮助文档中查看其构造函数:QPushButton(QWidget *parent = nullptr)为指定父窗口
//pushbutton2->show(); //如果没有指定父窗口,则需要show使其显示
(窗口可通过show进行显示,hide进行隐藏)
相关的内存回收机制
一般new一个对象之后需要进行释放,但是QT中如果添加了父对象则不用,父对象析构时会对其附着于上的子对象进行释放(对象)
//==》pushbutton2 不用进行另外的释放
//条件1:内存的自动回收机制适用于从QObject派生的类,窗口类(例如QWidget都是从QObject派生的,所以自动回收机制适用于所有窗口类)
//条件2:需要指定父类(先析构孩子,再析构自己)
新建一个MyButton类,继承自QPushButton,参数(QWidget *parent = nullptr)可以不进行改变。
3.信号槽
信号发出者,信号,信号接收者,处理的槽函数
信号查询:F1帮助文档,找Signals的部分,如果没有找父对象(Inherits)的部分是否有Signals
槽函数查询:与信号类似
槽函数和回调函数???:回调函数:不马上执行,当满足条件时才执行
举例:对应上面提到的窗口中按钮创建的不同方式
//信号槽
//connect(&pushbutton1,&QPushButton::clicked,this,&Study_CarManager::close);
connect(pushbutton2,&QPushButton::clicked,this,&Study_CarManager::close);
自定义信号槽(信号槽传参),槽函数的参数不能多于信号的参数(多出来的参数无法获取),槽函数可以重载
.h文件:
signals:
void signal1(int num1,int num2);
private:
void Myslot1(int num1,int num2);
.cpp文件:
//自定义带参数信号槽传参,注意也可以是其他类中发出信号,在此槽函数中进行处理
//如果信号没有重载可以用这种方式
connect(this,&Study_CarManager::signal1,this,&Study_CarManager::Myslot1);
//如果信号出现重载,使用一下方法:
void (Study_CarManager::*MySigsub)(int,int) = &Study_CarManager::signal1;
connect(this,MySigsub,this,&Study_CarManager::Myslot1);
emit signal1(100,500);
//以上为构造函数中
void Study_CarManager::Myslot1(int num1, int num2)
{
//qdebug 自定义的槽函数
qDebug()<<"Myslot1:num1"<<num1<<"num2"<<num2;
}
4.Lambda表达式(隐式函数,没有函数名)
匿名的函数对象:
//“=”为拷贝外部数据的地址
全部:[]() mulable exception ->int {} --------> mulable值拷贝时默认为const不可改变,加之后变为可变可赋值 ;exception 为抛出异常;->int为返回值类型。如果整个函数只有一个return则不用加改返回值类型,如果有多个return的地方则需要加。
[=](int num,QString str){
}
//“&”为引用外部数据的地址
[&](int num,QString str){
}
//如果传入具体参数:[b]则大括号内只能使用外部的该参数
如果函数内容不复杂则可不用重新定义新的函数,直接使用lambda表达式