概要:这期文章主要讲解Qt中信号和槽的概念以及信号与槽之间的连接方式。
Qt中的信号是什么?
Qt中所有的控件都可以发出信号和接收信号。在上一期,我提到将信号简单地理解为是事件的发出或者是开始。例如,现在有一个按钮的点击事件,那么,这个事件的发出是从按钮被点击这个时刻开始。
Qt中对于信号有相应的信号函数概念,除了Qt提供的控件信号函数,还可以自定义信号函数。
Qt提供的信号函数,例如:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1494e20dcf444a1ffd594c1f4636b116.png)
选择按钮 --> 右键菜单 --> 转到槽可以看到上图所示的Qt提供给QPushButton的信号函数
clicked() :点击信号
pressed() : 按压信号
released() : 释放信号
toggled(bool) : 开关信号
或者,自定义的信号函数。例如
helloworld.h
signals:
//定义一个发送数据的信号
void sendData(QString _qsData);
helloworld.cpp
//发出发送数据信号
emit sendData("");
Qt中的槽是什么?
在上一期,我提到将信号简单地理解为是对事件的响应或者是处理。对事件的处理才是我们写函数逻辑的地方。
Qt中对于槽也有槽函数的概念。在槽函数中,你可以写对于接收到这个信号的处理逻辑。
以我们写的第一个Qt项目为例:
槽函数的声明,如下图所示
槽函数的实现,如下图所示
上面展示的Qt控件提供的槽函数,只需要对控件转到槽,并选择处理的信号即可,不需要手动的去写信号的发出。
下面举一个自定义的信号函数与槽函数的例子:
信号函数和槽函数的声明,如下图所示
信号函数的发出,槽函数的实现以及信号函数与槽函数的绑定,如下图所示
运行结果如下图所示
其中,对于自定义的信号函数,我们不仅需要自己去写它的发送,而且还需要去写该信号函数与槽函数的连接函数。
Qt中的connet()函数是什么?
connect() 是 QObject 类中的一个静态成员函数,专门用来关联指定的信号函数和槽函数。
如果自定义的信号与槽没有连接起来,那么,就算你触发了信号,程序也不会执行对应的槽函数。