一、快捷键
注释 ctrl+/
运行 ctrl+r
编译 ctrl+ b
查找 ctrl + f
整行移动 ctrl+ shift + ↑/↓
自动对齐 ctrl + i
同名之间的.h 和.c切换 f4
帮助文档 f1 /左侧按钮qt\5.14.2\mingw73_64\bin\assistant
二、Object->Widget->QPushButton
2.1窗口Widget
resize(600,400); //设置窗口大小
setWindowTitle("第一个窗口"); //设置窗口标题
setFixedSize(600,400); //设置固定大小
2.2按钮QPushButton
QPushButton * btn = new QPushButton; //创建按钮
btn->setParent(this); //设置父窗口 //btn 依赖窗口弹出 this指该窗口
btn->show(); //显示
btn->setText("第一个按钮"); //显示文本
btn->move(100,100); //移动btn2
btn->resize(50,50); //重置按钮大小
三、对象树
3.1 当创建的对象在堆区时,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象放入到对象树中。
3.2一定程度上简化了回收机制
四、信号和槽
4.1 连接函数connect
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
特点:发送者和接受者松散耦合
Ex: connect(mybtn,&QPushButton::clicked,this,&QPushButton::close);
注:1.信号的参数个数必须大于或者等于槽函数的参数个数,且类型一一对应
2.信号可以连接信号
3.一个信号可以连接多个槽函数
4.多个信号可以连接一个槽函数
4.2断开信号和槽disconnect
QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
Ex:disconnect(mybtn,&QPushButton::clicked,this,&QPushButton::close);
4.3 自定义信号和槽
4.3.1 自定义信号(写在signal)
1)返回void
2)需要声明,不需要实现
3)可以有参数,可以重载
4.3.2自定义槽(写在public)
1)返回void
2)需要声明,需要实现
3)可以有参数,可以重载
4.3.3触发自定义信号
触发关键字 emit 自定义信号
Ex:emit zt->hungry();
4.4当自定义信号和槽出现重载情况需要函数指针明确函数的地址
Ex:void(Teacher:: *teacherSignal)(QString) =&Teacher::hungry;
注Qstring转char*方法
1).ToUtf8()转为 QByteArray
2).Data()转为char*
五、Lambda表达式
C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。首先看一下Lambda表达式的基本构成:
[capture](parameters) mutable ->return-type
{
statement
}
[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}
① 函数对象参数;
[],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式:
1) 空。没有使用任何函数对象参数。
2) =。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
3) &。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。
4) this。函数体内可以使用Lambda所在类中的成员变量。
5) a。将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。要修改传递进来的a的拷贝,可以添加mutable修饰符。
6) &a。将a按引用进行传递。
7) a, &b。将a按值进行传递,b按引用进行传递。
8) =,&a, &b。除a和b按引用进行传递外,其他参数都按值进行传递。
9) &, a, b。除a和b按值进行传递外,其他参数都按引用进行传递。
② 操作符重载函数参数;
标识重载的()操作符的参数,没有参数时,这部分可以省略。参数可以通过按值(如:(a,b))和按引用(如:(&a,&b))两种方式进行传递。
③ 可修改标示符;
mutable声明,这部分可以省略。按值传递函数对象参数时(值传递参数为只读),加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)。
QPushButton * myBtn = new QPushButton (this);
QPushButton * myBtn2 = new QPushButton (this);
myBtn2->move(100,100);
int m = 10;
connect(myBtn,&QPushButton::clicked,this,[m] ()mutable { m = 100 + 10; qDebug() << m; });
connect(myBtn2,&QPushButton::clicked,this,[=] () { qDebug() << m; });
qDebug() << m;
④ 函数返回值;
->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。
⑤ 是函数体;
{},标识函数的实现,这部分不能省略,但函数体可以为空。