QT_快捷键、对象树、信号与槽

一、快捷键

注释 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的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。

⑤ 是函数体;

   {},标识函数的实现,这部分不能省略,但函数体可以为空。

 

上一篇:QT学习笔记一


下一篇:QPushButton中常用的方法