Qt5教程 (5) Lambda匿名函数的使用

Lambda是C++11的新特性, 首先看看你的.pro项目文件里有没有CONFIG += c++11这句话, 没有就加上.
下面新建一个工程, 具体步骤就不多说了

然后给主窗口添加一个按钮b, 并且包含头文件, 下面要用.

我们先来看一下匿名函数最简单的使用

connect(&b, &QPushButton::clicked,
            [] ()
            {
                qDebug() << "1111";
            }
            );

之后保存运行, 点击按键会发现, 1111被打印出来了.

这个匿名函数到底是什么东西呢?
[]:

  • 这个方括号是用来传递外部变量的, 因为在匿名函数中是无法使用外部变量的, 只能通过方括号传递给他, 才能捕获到. 比如 我需要使用b这个变量, 只需要在方括号中加入b即可:

      [b] ()
      {
      }
  • 但是如果要传的变量很多, 一个个加到方括号里就太麻烦了, 这时我们可以使用 ‘=‘, 将外部所有局部变量、类中所有成员以值传递方式传进来: [=] (). 但是通过这种方式传递进来的变量是只读的, 不能修改, 需要在后面加mutable关键字:
      [=] () mutable
      {
      }
  • 使用 this, 可以把类中所有成员以值传递方式传递进来:
      [this] ()
      {
      }
  • 使用 &, 把外部所有局部变量, 通过引用方式传递进来(不推荐, 容易出错)
      [&] ()
      {
      }

():

  • 括号用来接收信号的参数

{}:

  • 花括号内为匿名函数的逻辑代码.

我们来试一下带参数的用法, QPushButton::clicked是带参数bool checked的, 它的默认值为false, 鼠标悬停在QPushButton::clicked上, 按下F1即可跳转到Qt文档:

我们通过匿名函数来打印这个参数的值:

connect(&b, &QPushButton::clicked,
            [=] (bool value)
            {
                qDebug() << value;
            }
            );

保存后运行, 按下按钮, 输出false:

使用Lambda的方法比之前自己创建槽函数可方便多了!!!

附录

mainwidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:
    QPushButton b;
};

#endif // MAINWIDGET_H

mainwidget.cpp

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    resize(200, 200);
    b.setParent(this);
    b.setText("按钮");
    b.move(50, 50);

    connect(&b, &QPushButton::clicked,
            [=] (bool value)
            {
                qDebug() << value;
            }
            );
}

MainWidget::~MainWidget()
{

}

原文地址:https://www.cnblogs.com/raina/p/11318012.html

时间: 2024-10-24 05:46:38

Qt5教程 (5) Lambda匿名函数的使用的相关文章

c++11 lambda(匿名函数)

#include <iostream> #include <functional> using namespace std::placeholders; //lambda即匿名函数 int main() { int a = 10; //当return所有的返回都是一个类型就不需要指定返回值的类型,因为编译器会自动推断 //也可以指定返回值类型形式:[]()->int{return 1}; //格式:[captures] (params) -> ret {Statment

python: lambda 匿名函数

lambda 匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 64, 81] 通过对比可以看出,匿名函数lambda x: x *

20180720 (lambda匿名函数,sorded()排序函数,filter()筛选函数,map()映射函数,递归,二分函数)

一.lambda匿名函数           (一行搞定一个函数,但是不能完成复杂的函数操作) 语法:函数名 = lambda 参数 : 返回值 注意: 1.函数的参数可以有多个,多个参数之间用逗号隔开 2.匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据 3.返回值和正常的函数一样,可以是任意数据类型 例如:普通函数 def func(n) return n*n print(func(6))               ======>36 例如:lambda a = lambda x

lambda匿名函数和他的小伙伴

lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(3)) #27 f = lambda n : n ** n print(func(3)) #27 语法: 函数名 = lambda 参数 : 返回值 注意: 函数的参数可以有多个, 多个参数之间用逗号分开 匿名函数不管多复杂, 只能写一行, 并且逻辑结束后直接返回数据 返回值和正常的函数一样,可以是任意数据类型. x = lambda a

Python的lambda匿名函数

lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2print g(4) lambda表达式在很多编程语言都有对应的实现.比如C#: var g = x => x**2Console.WriteLine(g(4)) 那么,lambda表达式有什么用处呢?很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称而已,同

python学习之lambda匿名函数

1 Python支持运行时使用“lambda”建立匿名函数(anonymous functions that are not bound to a name). python "lambda"和functional programming语言有区别,但是他非常强大经常拿来和诸如filter(),map(),reduce()等经典概念结合. 以下示例普通函数和匿名函数: 1 In [113]: def normalFun (x): return x**2 2 3 In [114]: pr

Python 3 之 lambda匿名函数详解

------- lambda ------------------------------------- 除了def语句之外,Python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具很相似,所以称为lambda.就像def一样,这个表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名.这也就是lambda有时叫做匿名函数的原因.实际上,他们常常以一种行内进行函数定义的形式使用,或者用作推迟执行一些代码. lambda表达式 lambd

lambda匿名函数

转自廖雪峰老师文章 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突.此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lambda x: x * x >>> f

python lambda匿名函数

Python的一个很重要的方面就是:函数式编程(functional programming),即可以再原本传递参数和值的地方传递函数. lambda x: x%3 == 0 和以下等价: def by_three(x): return x %3 == 0 我们不需要真的给函数一个名字,其也可以工作并获得结果.这就是lambda创建的函数为匿名函数的原因. eg. my_list = range(16) print filter(lambda x: x % 3 == 0, my_list) 运行