对于选择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表达式常用的形式就是[=](){}