对于选择qmake还是cmake,现在写的暂时先用qmake
1.命名规范和快捷键
2.按钮控件常用API
//创建第一个按钮
QPushButton * btn = new QPushButton;
//让btn对象 依赖在mywidget窗口中
btn->setParent(this);
//显示文本
btn->setText("第一个按钮");
//创建第二个按钮 按照控件大小创建窗口
QPushButton * btn2 = new QPushButton("第二个按钮",this);
//移动btn2按钮
btn2->move(100,100);
//重设btn2按钮大小
btn2->resize(100,100);
//重置窗口大小
resize(600,400);
//设置固定窗口大小
setFixedSize(600,400);
//设置窗口标题
setWindowTitle("第一个窗口");
3.对象树
当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。一定程度上简化了内存回收机制。
4.信号和槽
//需求 点击我的按钮 关闭窗口
//参数1 信号的发送者 参数2 发送的信号(函数的地址) 参数3 信号的接受者 参数4 处理的槽函数
connect(myBtn, &MyPushButton::clicked , this , &MyWidget::close);
// connect(myBtn, &QPushButton::clicked , this , &QWidget::close);//也可以使用父类的地址
classIsOver();//发出信号
void Widget::classIsOver()
{
//下课函数,调用后 触发老师饿了的信号
// emit zt->hungry();
emit zt->hungry("宫保鸡丁");
}
5.自定义信号和槽
//teacher.h中的teacher类中
signals:
//自定义信号 写道signals下
//返回值是void,只需要声明,不需要实现
//可以有参数,可以重载
void hungry();
void hungry(QString foodName);//重载的函数
//student.h中的student类中
public slots:
//早期QT版本 必须要写到public slots下,高级版本可以写到public或全局下
//返回值void,需要声明,也需要实现
//可以有参数,可以发生重载
void treat();
void treat(QString foodName);//重载的函数
//调用重载的函数时
//连接带参数的信号和槽 出现了重载
//指针 -> 地址
//函数指针 -> 函数地址
void(Teacher::*teacherSignal)(QString) = &Teacher::hungry;//函数指针
void(Student::*studentSlot)(QString) = &Student::treat;//函数指针
connect(zt, teacherSignal , st , studentSlot );
classIsOver();
调用QString时,输出带双引号的处理方式
// qDebug() << "请老师吃饭,老师要吃:" << foodName;//输出结果为 请老师吃饭,老师要吃: "宫保鸡丁"
//QString -> char * 先转成QByteArray ( .toUtf8() )再转char * ( .data() )
qDebug() << "请老师吃饭,老师要吃:" << foodName.toUtf8().data();
//输出结果为 请老师吃饭,老师要吃: 宫保鸡丁 //不带引号
6.信号连接信号
//点击一个 下课的按钮 , 再触发下课
QPushButton * btn = new QPushButton("下课",this);
this->resize(600,400);
//点击按钮 触发下课
// connect(btn , &QPushButton::clicked, this, &Widget::classIsOver);
// 无参信号和槽连接
void(Teacher::*teacherSignal2)(void) = &Teacher::hungry;//函数指针
void(Student::*studentSlot2)(void) = &Student::treat;//函数指针
connect(zt, teacherSignal2 , st , studentSlot2 );
//信号连接信号
connect(btn , &QPushButton::clicked, zt, teacherSignal2);
断开信号
disconnect(btn , &QPushButton::clicked, zt, teacherSignal2);//只有前边的函数名不一样
7.lambda表达式
//利用lambda表达式 实现点击按钮 关闭窗口
QPushButton * btn2 = new QPushButton("关闭",this);
btn2->move(200,0);
connect(btn2,&QPushButton::clicked,this,[=](){
emit zt->hungry("宫保鸡丁");
});
//lambda表达式常用的形式就是[=](){}