# **4\. 信号和槽机制** 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。**当某个事件发生之后**,比如,按钮检测到自己被点击了一下,**它就会发出一个信号(signal)**。这种发出是没有目的的,类似广播。**如果有对象对这个信号感兴趣,它就会使用连接(connect)函数**,意思是,**将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号**。也就是说,**当信号发出时,被连接的槽函数会自动被回调**。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。 ## [](#)**4.1 系统自带的信号和槽** 下面我们完成一个小功能,上面我们已经学习了按钮的创建,但是还没有体现出按钮的功能,按钮最大的功能也就是点击后触发一些事情,比如我们点击按钮,就把当前的窗口给关闭掉,那么在Qt中,这样的功能如何实现呢? 其实两行代码就可以搞定了,我们看下面的代码 ``` QPushButton * quitBtn = new QPushButton("关闭窗口",this); connect(quitBtn,&QPushButton::clicked,this,&MyWidget::close); ``` 第一行是创建一个关闭按钮,这个之前已经学过,第二行就是核心了,也就是信号槽的使用方式 connect()函数最常用的一般形式: `connect(sender, signal, receiver, slot);` 参数解释: - sender:发出信号的对象 - signal:发送对象发出的信号 - receiver:接收信号的对象 - slot:接收对象在接收到信号之后所需要调用的函数(槽函数) 那么系统自带的信号和槽通常如何查找呢,这个就需要利用帮助文档了,在帮助文档中比如我们上面的按钮的点击信号,在帮助文档中输入QPushButton,首先我们可以在Contents中寻找关键字 signals,信号的意思,但是我们发现并没有找到,这时候我们应该想到也许这个信号的被父类继承下来的,因此我们去他的父类[](#)QAbstractButton中就可以找到该关键字,点击signals索引到系统自带的信号有如下几个 ![](data:image/png;base64,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) 这里的clicked就是我们要找到,槽函数的寻找方式和信号一样,只不过他的关键字是slot。 ## [](#)**4.2 自定义信号和槽** 使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。 下面我们看看使用 Qt 的信号槽: 首先定义一个学生类和老师类: 老师类中声明信号 饿了 hungry ``` signals: void hungury(); ``` 学生类中声明槽 请客 treat ``` public slots: void treat(); ``` 在窗口中声明一个公共方法下课,这个方法的调用会触发老师饿了这个信号,而响应槽函数学生请客 ``` void MyWidget::ClassIsOver() { //发送信号 emit teacher->hungury(); } //学生响应了槽函数,并且打印信息 //自定义槽函数 实现 void Student::eat() { qDebug() << "该吃饭了!"; } //在窗口中连接信号槽 teacher = new Teacher(this); student = new Student(this); connect(teacher,&Teacher::hungury,student,&Student::treat); //并且调用下课函数,测试打印出 “该吃饭了” //自定义的信号 hungry带参数,需要提供重载的自定义信号和 自定义槽 void hungury(QString name); 自定义信号 void treat(QString name ); 自定义槽 //但是由于有两个重名的自定义信号和自定义的槽,直接连接会报错,所以需要利用函数指针来指向函数地址, 然后在做连接 void (Teacher:: * teacherSingal)(QString) = &Teacher::hungury; void (Student:: * studentSlot)(QString) = &Student::treat; connect(teacher,teacherSingal,student,studentSlot); ``` [](#)自定义信号槽需要注意的事项: - 发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外); - **信号和槽函数返回值是 void** - **信号只需要声明,不需要实现** - **槽函数需要声明也需要实现** - **槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;** - **使用 emit 在恰当的位置发送信号;** - **使用connect()函数连接信号和槽。** - **任何成员函数、static 函数、全局函数和 Lambda 表达式都可以作为槽函数** - 信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。 - 如果信号和槽的参数不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号的少)。 ## [](#)[](#)**4.3信号槽的拓展** - 一个信号可以和多个槽相连 **如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。** - 多个信号可以连接到一个槽 **只要任意一个信号发出,这个槽就会被调用**。 - 一个信号可以连接到另外的一个信号 **当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。** - 槽可以被取消链接 这种情况并不经常出现,因为**当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽**。 - 信号槽可以断开 利用**disconnect**关键字是可以断开信号槽的 - 使用Lambda 表达式 在使用 Qt 5 的时候,能够支持 Qt 5 的编译器都是支持 Lambda 表达式的。 在连接信号和槽的时候,槽函数可以使用Lambda表达式的方式进行处理。后面我们会详细介绍什么是Lambda表达式 ## [](#)**4.4 Qt4版本的信号槽写法** `connect(zt,SIGNAL(hungry(QString)),st,SLOT(treat(QString)));` 这里使用了**SIGNAL和SLOT这两个宏,将两个函数名转换成了字符串**。注意到connect()函数的 signal 和 slot 都是接受字符串,一旦出现连接不成功的情况,Qt4是没有编译错误的(因为一切都是字符串,编译期是不检查字符串是否匹配),而是在运行时给出错误。这无疑会增加程序的不稳定性。 Qt5在语法上完全兼容Qt4,而反之是不可以的。 ## [](#)**4.5 Lambda表达式** C++11中的Lambda表达式**用于定义并创建匿名的函数对象**,以简化编程工作。首先看一下Lambda表达式的基本构成: ``` capture mutable ->return-type { statement } 函数对象参数 mutable ->返回值{函数体} ``` ① 函数对象参数; \[\],标识一个**Lambda的开始**,这部分必须存在,**不能省略**。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式: - 空。没有使用任何函数对象参数。 - \=。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是**值传递方式**(相当于编译器自动为我们按值传递了所有局部变量)。 - &。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是**引用传递方式**(相当于编译器自动为我们按引用传递了所有局部变量)。 - this。函数体内可以使用Lambda所在类中的成员变量。 - a。将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。**要修改传递进来的a的拷贝**,可以添加mutable修饰符。 - &a。将a按引用进行传递。 - a, &b。将a按值进行传递,b按引用进行传递。 - \=,&a, &b。除a和b按引用进行传递外,其他参数都按值进行传递。 - &, 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的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。 ⑤ 是函数体; {},标识函数的实现,这部分不能省略,但函数体可以为空。