在开始前先说一下qt中的坐标系,X和Y方向如下图所示
信号和槽是 Qt 特有的信息传输机制,是 Qt 设计程序的重要基础,它可以让互不干扰的对象建立一种联系,当信号发出时,被连接的槽函数会自动被回调。
信号是由于用户对窗口或控件进行了某些操作,比如按钮单击、鼠标移动、鼠标按下、鼠标释放。
槽的本质是类的成员函数,其参数可以是任意类型的
使用 QOjbect类中的 connect 函数进行二者的关联
一、信号和槽基本使用(点击按钮关闭窗口)
在mywidget.cpp中加入以下红框中代码
运行结果
二、自定义信号和槽
1、简单实现
新建一个工程
实现目标:下课后老师会发出饿了的信号,学生进行响应,请老师吃饭
分别创建好老师类和学生类,基类选择QObject,不会的请参考笔记4
在老师的头文件中加入以下代码
在学生的头文件中加入如下代码
在学生的.cpp文件中加入以下代码,对函数进行实现
之后在窗口的头文件(widget.h)中对老师和学生的头文件进行包含并定义两个指针。
在窗口的.cpp文件中加入如下代码,记得在头文件中进行下课函数的声明
运行结果
2、信号和槽重载
在老师头文件中加入以下代码
在学生头文件中加入以下代码
源文件中对函数进行实现
在窗口源程序中加入如下代码,函数指针具体为
引用自指针函数和函数指针
运行结果如下:
3、信号连接信号
在窗口源程序中加入以下代码
运行结果:
可以利用disconnect断开信号槽的连接
4、lambda表达式
使用lambda表达式的好处在于不用定义槽函数,也不用指定信号接收者。