widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>//Teacher 老师类
//Student 学生类
//下课后,老师会触发信号,饿了,学生响应信号,请客吃饭Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建一个老师对象this->teacher1 = new Teacher(this);//创建一个学生对象this->student1 = new Student(this);//    //老师饿了,学生请客的连接
//    connect(teacher1, &Teacher::hungry, student1, &Student::treat);//    //调用下课函数
//    classIsOver();//连接带参数的信号和槽//指针 -> 地址//函数指针 -> 函数地址void(Teacher:: *teachersignal)(QString) = &Teacher::hungry;void(Student:: *studentslot)(QString) = &Student::treat;//重载函数使用无参函数//void(Teacher:: *teachersignal)(QString) = &Teacher::hungry;//void(Student:: *studentslot)(QString) = &Student::treat;connect(teacher1, teachersignal, student1, studentslot);//classIsOver();//点击一个下课的按钮,再触发下课QPushButton * btn1 = new QPushButton("下课",this);QPushButton * btn2 = new QPushButton("下课",this);btn2->move(100,0);//重置窗口大小resize(600, 400);//点击按钮触发下课connect(btn1, &QPushButton::clicked, this, &Widget::classIsOver);//无参信号和槽连接void(Teacher:: *teachersignal2)(void) = &Teacher::hungry;void(Student:: *studentslot2)(void) = &Student::treat;connect(teacher1, teachersignal2, student1, studentslot2);//信号连接信号connect(btn2, &QPushButton::clicked, teacher1,teachersignal2);//断开信号//disconnect(teacher1, teachersignal2, student1, studentslot2);//拓展//1、信号是可以连接信号的//2、一个信号可以连接多个槽函数//3、多个信号可以连接同一个槽函数//4、信号和槽函数的参数,类型必须一一对应//5、信号的参数个数可以多于槽函数的参数个数//Qt4版本以前的信号和槽连接方式//利用Qt4信号槽连接无参版本//Qt4版本 底层SIGNAL("hungry") SLOT("treat")//connect(teacher1, SIGNAL(hungry()), student1, SLOT(treat()));//Qt4版本优点:参数直观 缺点:类型不做检测//Qt5以上支持Qt4写法,反之不支持//    QPushButton * btn3 = new QPushButton;
//    [btn1](){//        btn1->setText("qwe");
//        btn3->setText("qwer");    //btn3是看不到的,因为只捕获了btn1
//    }();QPushButton * myBtn1 = new QPushButton("myBtn1",this);QPushButton * myBtn2 = new QPushButton("myBtn2",this);myBtn1->move(0, 100);myBtn2->move(100, 100);int m = 10;//想要在lambda中修改传进来的值,必须在()后加mutable,修改的也只是拷贝,并不是本身connect(myBtn1, &QPushButton::clicked, this, [m]()mutable{m = m + 10; qDebug() << m;});connect(myBtn2, &QPushButton::clicked, this, [=]()mutable{qDebug() << m;});qDebug() << m;//返回值增加->int ret = []()->int{return 1000;}();qDebug() << "ret:" << ret;//利用lambda实现点击按钮,关闭窗口//[]是标识符 ()是参数 {}是实现体QPushButton * btn_close = new QPushButton("close", this);btn_close->move(50, 200);connect(btn_close, &QPushButton::clicked, this, [=](){this->close();student1->treat();});
}void Widget::classIsOver()
{//下课函数,调用触发老师饿了的信号emit teacher1->hungry("宫保鸡丁");//重载函数使用无参函数//emit teacher1->hungry();}Widget::~Widget()
{delete ui;
}

Qt——P14 Lambda表达式相关推荐

  1. Qt使用lambda表达式实现无参信号与有参槽的连接

    Qt使用lambda表达式实现无参信号与有参槽的连接 在信号与槽进行连接时有一个"点击按钮关闭窗口"的实现,此时信号和槽都是无参情况可以进行匹配,但是当信号无参而槽有参数的时候,就 ...

  2. QT中lambda表达式

    1.因为lambda表达式是c++11的特性 我们5.5及以上版本是支持的,5.4及一下需要在.pro文件中加入 CONFIG += c++11 lambda 的语法形式如下: [函数对象参数] (操 ...

  3. QT Core | 信号槽02 - GUI上按钮触发应用程序的函数(lambda表达式)

    文章目录 一.前言 二.新建一个QT项目 2.1.New File or Project 2.2.Location 2.3.Kit 2.4.Detail 2.5.Summary 2.6.工程 2.7. ...

  4. lambda qt 参数 槽函数_C++中的lambda表达式用法

    #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) {QCoreApp ...

  5. 【QT学习】Day 1 快捷键、按钮、对象树、信号和槽、Lambda表达式

    文章目录 一.QT简介 二.QT常用快捷键和命名规范 1.Windows版 2.Mac版 3.命名规范 三.创建一个QT程序 四.添加按钮常用的API 五.对象树 六.信号和槽 七.Lambda表达式 ...

  6. Qt - Lambda表达式

    文章目录 Lambda 表达式 语法格式 [capture] 捕获表达式变量 捕获作用域变量 (params) mutable constexpr noexcept ->return type ...

  7. 细说 Lambda 表达式

    原文链接:https://github.com/enbandari/Kotlin-Tutorials 1. 什么是 Lambda 表达式 Lambda 表达式,其实就是匿名函数.而函数其实就是功能(f ...

  8. C++Lambda表达式作为参数

    Lambda表达式又称为小型函数,它的使用方法是:[捕获方式](参数类型)->返回类型{代码} 通常我们不会写返回类型,因为编译器可以根据Return语句来推导返回类型,隐式为我们去加上去. 相 ...

  9. C++Primer 第10章lambda表达式

    C++Primer 第10章lambda表达式 泛型编程 咱们继续高歌猛进,下面我给大家继续讲关于算法的故事. 我们知道标准库容器中定义的算法大多数独立在算法之外,通常这些算法是通用的.它们可以处理不 ...

最新文章

  1. pytorch神经网络之卷积层与全连接层参数的设置
  2. Nginx服务器之基础学习
  3. boost::planar_face_traversal用法的测试程序
  4. 独家 | 揭秘2021双11背后的数据库硬核科技
  5. F4 value help and HANA native SQL
  6. 嵌入式软件工程师2021面试指南【转】
  7. vc中关于 directx的配置,和dxsdk_extras(directshow)
  8. Redis Zui佳实践:7个维度+43条使用规范,带你彻底玩转Redis
  9. 在演示文稿中控制视频播放效果
  10. [Windows] 【直播放映馆V9.0】Bilibili,斗鱼,虎牙,企鹅电竞,音乐电台,无广告看电影直播!...
  11. 用连接数据库的方式读取excel
  12. 家庭财务软件的概要分析
  13. java语言包安装_Eclipse 多国语言包的安装以及插件的安装方法
  14. 心电监护仪数据图解_心电监护仪数据怎么看
  15. Firfox的炫酷名字怎么来,各位,好不好奇~!
  16. 雨天的尾巴——LCA+树上差分+动态开点+线段树合并
  17. 中国长白山国际林海雪地马拉松节将于三月底举办
  18. Ogre引擎渲染系列之Normal Specular Mapping
  19. 小说阅读翻页分页实现思路
  20. DEV01-GBase 8a MPP Cluster SQL 编码进阶篇

热门文章

  1. Java-Volatile的实现(待删除)
  2. vue跳转静态HTML,Vue-router,在静态切换的世界中翱翔
  3. 5v 3.3v电平转换电路_MOS管电平转换电路,硬件工程师居家旅行、看门护院的必备良药...
  4. 08-图8 How Long Does It Take
  5. hbase 核心知识
  6. Delphi 7 定义你自己的事件
  7. javaweb中解决中文乱码问题
  8. golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
  9. 第六章 访问ContentProvider共享数据
  10. 回调函数的原理及PHP实例