Qt的信号与槽(三)
Qt的信号与槽(三)
- 1.disconnect
- 2.lambda表达式作为槽函数
🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Qt的学习】
📝📝本篇内容:disconnect;lambda表达式作为槽函数
⬆⬆⬆⬆上一篇:Qt的信号与槽(二)
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-
1.disconnect
disconnect是和connect相反的,connect是建立连接,因此disconnect是断开连接,一般性在我们的正常使用中不需要断开连接,除非我们需要更换槽函数
disconnect这个函数的参数和connect几乎是一模一样的,因此使用起来非常简单
我们写一份代码来演示,实现两个按钮,一个按钮来设置窗口标题,一个按钮来修改第一个按钮按下后显示的内容(修改第一个按钮的槽函数)
如果说我们不进行disconnect就会导致两个槽函数都会执行
2.lambda表达式作为槽函数
lambda表达式在很多的编程语言中都有应用,本质上就是一个匿名函数对象,主要应用在回调场景中进行一次性的使用,大大减轻了普通成员函数需要声明的重复工作。
lambda表达式是一个回调函数,无法直接获取到上层作用域中的变量,因此需要变量捕获,就是[ ]中的内容,如果想要捕获更多的内容,也可以使用[=],将上层作用域的变量名全部捕获进来,如下所示
我们要特别注意的是变量的生命周期,在代码中我已经用注释标出来了,像this指针就是指向的就是main函数中的Widget局部变量,它会在main函数执行完进行销毁,main执行完,说明程序执行完了,Widget就可以销毁了,this也就可以销毁了,lambda也就用不到它了。
它的运行结果也是一样的,按钮按下后将按钮和窗口的位置进行移动
对于熟悉C++的同学来说一定也知道这边可以使用引用来捕获变量,但是我们在Qt中很少使用,因为使用的都是控件指针,那么使用引用捕获和值传递的捕获都无所谓,但是如果使用引用捕获也是需要关注它的生命周期,因为引用一般都是给控件的指针变量取别名,但是指针变量它本身出了作用域就销毁了,因此就不太好处理了。
如果对于lambda不是很了解的同学,可以去看我C++专栏中的C++11(中),其中有详细讲解lambda表达式
还有一个点要注意,就是我们现在使用的lambda是C++11中引入的,对于Qt5起步的版本都是默认C++11来编译的,但是Qt4及以下的版本需要手动在.pro文件中加上C++11的编译选项
🌸🌸Qt的信号与槽(三)大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪