本文最后更新于 118 天前,其中的信息可能已经有所发展或是发生改变。
我们需要自定义给信号槽,首先要知道怎么才能实现信号槽模板
发送者->信号->接收者->槽函数
我们首先要创建自定义的发送者和接收者(创建两个类)
设置类名、类的基类(选择QObject)、文件名称、地址。
自定义信号
创建两个对应的类之后,我们知道信号属于发送者,槽函数属于接收者。我们在接收者类中,声明信号。
声明信号
在发送者(sender)类的.h文件中,声明信号函数。信号函数的关键字为“signals”,声明信号函数。
自定义槽
自定义信号后,需要自定义槽函数。
声明定义槽函数
在接收者(receiver)类的.h文件中,声明槽函数,信号函数的关键字为“slots”,槽函数关键字需要用“public、private、protected”三个关键声明。
信号函数可以不用定义,但是槽函数必须定义。可以右键函数名,选择“Refactor”在对应的.cpp文件中添加定义。
实例化自定义对象
创建之后,我们在mainwindow的.h文件中引用两个类的头文件,并声明类名,在MainWindow类中创建两个类的对象(常设置为私有(private))。
在mainwindow.cpp中实例化两个对象,在构造函数中进行。
连接信号槽
使用connect函数,connect(发送者,信号函数,接收者,槽函数)。
补充
一个信号可以连接多个槽。
connect(pushButton, SIGNAL(sendMessages), student, SLOT(comBackToClass));
connect(pushButton, SIGNAL(sendMessages), this, SLOT(hide)) ;
很好理解发射一枪可以打中多个目标,一个信号产生会引发多个槽函数。
多个信号可以连接一个槽
connect(pushButton, SIGNAL(sendMessages1), this, SLOT(hide));
connect(pushButton, SIGNAL(sendMessages2), this, SLOT(hide)) ;
同样,我们可以通过按钮1或者按钮2被按下时候执行关闭页面的操作,那么就是多个信号连接同一个槽
一个信号可以连接另外一个信号
connect(pushButton, SIGNAL(sendMessages2), this, SIGNAL(iconSizeChanged())) ;