首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Qt学习-----------7

Qt学习-----------7

作者头像
大忽悠爱学习
发布于 2021-02-22 11:07:25
发布于 2021-02-22 11:07:25
4970
举报
文章被收录于专栏:c++与qt学习c++与qt学习

lambda表达式

c++11中lambda表达式用于定义并创建匿名的函数对象 lambda表达式的基本构成:

[函数参数对象](操作符重载函数参数)mutable->返回值{函数体};

代码语言:javascript
复制
void(Teacher::*tsignal)(QString)=&Teacher::hungry; //函数地址就是函数的名字
    void(Student::*ssignal)(QString)=&Student::treat;
    connect(tt,tsignal,st,ssignal);  //里面填的都是地址
    //调用下课函数
   //classisover();

    //点击按钮,触发下课
    QPushButton* btn=new QPushButton("请客",this);
     //无参信号和槽
    void(Teacher::*tsignal2)(void)=&Teacher::hungry;
    void(Student::*ssignal2)(void)=&Student::treat;
    connect(tt,tsignal2,st,ssignal2);

     //信号和信号连接
    //不需要无参的emit触发
     //clicked信号的参数是bool类型,只有一个,如果这边用有参,参数类型不一致
    connect( btn,&QPushButton::clicked,tt,tsignal2);

    //lambda表达式:
    [=](){btn->setText("下课");}();//最后加一个小括号,才是函数调用,否则只是函数声明

//     QPushButton *btn1=new QPushButton(this);
//     QPushButton* btn2=new QPushButton(this);
//     btn2->move(100,100);
//     int m=10;
//     //默认情况下m为只读状态,修改加mutable,但是只会修改拷贝,而非值本身,因为是值传递
//     connect(btn1,&QPushButton::clicked,this,[m]()mutable{m=100+10;qDebug()<<"m="<<m;});
//     connect(btn2,&QPushButton::clicked,this,[=](){qDebug()<<"m="<<m;});
//     qDebug()<<m;


    //返回值
    int ret=[=]()->int{return 1000;}();
    qDebug()<<"ret="<<ret;

  //利用lambda表达式实现,点击按钮关闭窗口
    QPushButton *btn3=new QPushButton;
    btn3->setParent(this);
    btn3->setText("关闭");
    btn3->move(100,0);
    //如果第三个参数是this,可以省掉不写
    connect(btn3,&QPushButton::clicked,[=](){close(); 
    emit tt->hungry("宫保鸡丁");});









    //断开信号
    //disconnect(tt,tsignal2,st,ssignal2);
    //拓展
    //1.信号可以连接信号
    //2.一个信号可以连接多个槽
   //3.多个信号可以连接同一个槽函数
    //4.信号和槽的参数必须类型一一对应
    //5.信号的参数个数可以多于槽函数,但类型也要对应

}
void Widget::classisover()
{
    //下课后,触发老师饿了的信号
    //emit 触发:emit这里是为了触发老师的hungry函数
    //如果采用信号连接信号,那么当按钮按下的时候,老师的hungry函数就会被触发
   //emit tt->hungry();
    //带参数
    //emit tt->hungry("宫保鸡丁");

}

Widget::~Widget()
{
    delete ui;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • lambda表达式
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档