原创
Qt中QObject::connect()的lambda用法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
</div>
<!--一个博主专栏付费入口-->
<!--一个博主专栏付费入口结束-->
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css">
<div class="htmledit_views" id="content_views">
<p>Qt5在QObject::connect()添加了几种新用法,其中一种是lambda表达式(也称为:匿名函数),其中C++的lambda表达式原理解说可以参考博主这篇博客:<a href="https://blog.csdn.net/naibozhuan3744/article/details/96353035" rel="nofollow">https://blog.csdn.net/naibozhuan3744/article/details/96353035</a></p>
一、下面是对Qt中在QObject::connect()中的lambda表达式常用用法
-
QString str("I am a string!");
-
device=str;
-
connect(ui->pushButton,&QPushButton::clicked,[&](
bool){qDebug()<<
"device=="<<device;});
表达式详解
a1 第一个参数含义
第一个参数ui->pushButton:表示对象;
a2 第二个参数含义
第二个参数&QPushButton::clicked:表示对象包含的信号(该信号隐藏参数,实际上在槽函数仍然可以调用信号参数列表);
a3 第三个参数含义
第三个参数:[&](bool){qDebug()<<"device=="<<device};
该connect只有三个参数,在三个参数情况下,默认第三个槽函数的对象是本类this,也就是第三个参数this被省略了。
[&]中的&:表示调用this作用域内任何参数;一般是全局变量,不能是局部变量,否则局部变量会用完销毁,调用就会出现内存错误,程序奔溃!(注意,[&]这里前面不用加&,即这种表达式&[&]是错误的)
(bool):函数参数列表,该参数列表接收了信号参数列表,也就是等于信号signal的参数列表;
{qDebug()<<"device=="<<device}:函数体,将函数要执行的代码写在这里;
二、具体的实例代码如下所示
widget.h
-
#ifndef WIDGET_H
-
#define WIDGET_H
-
-
#include <QWidget>
-
-
namespace Ui {
-