QT+lambda 表达式
Posted doker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT+lambda 表达式相关的知识,希望对你有一定的参考价值。
#include "mainwidget.h" #include <QPushButton> #include <QDebug> MainWidget::MainWidget(QWidget *parent) : QWidget(parent) // QPushButton btn1; // QPushButton btn2; btn1.setParent(this); btn1.setText("colse"); btn1.move(100,100); btn2 = new QPushButton(this);//指针没有空间,是需要动态的对其进行空间的分配 btn2 ->setParent(this); btn2 ->setText(" 3 2 1 "); connect(&btn1,&QPushButton::pressed,this ,&MainWidget::close); /* 对connect的说明: * &btn1 :信号发出着,指针类型 * &QPushButton::pressed:处理信号, &发送者的类名::信号名字 * this:信号接收者 * &MainWidget::close: 槽函数,信号处理函数 &接收者的类名::槽函数名字 */ /*自定义槽,说的更加通俗一点,就是普通函数的用法 * QT5:可以是 任意的成员函数(常用这种方法,直接写成该类的成员函数),普通全局函数,静态函数 都可以是槽函数 * 槽函数需要和信号一致(参数,返回值) * 由于信号都是没有返回值,所以,槽函数一定没有返回值 */ //释放按钮btn2实现里面的文本内容发生改变 connect(btn2,&QPushButton::released,this,&MainWidget::mySlot);//在写自定义信号槽函数的时候,一定要看发送信号函数的类型,这里released信号的函数是:void QAbstractButton::released() //即released函数没有参数,也没有返回值,槽函数需要和信号一致,也没有参数和返回值 //释放按钮btn2隐藏按钮btn1 connect(btn2,&QPushButton::released,&btn1,&QPushButton::hide); //互相切换窗口的小游戏 this->setFixedSize(360,480); this ->setWindowTitle("苍老师"); btn3.setParent(this); btn3.setText("换到波老师"); btn3.move(50,50); //显示子窗口 // w.show(); //点击按钮btn3实现主窗口隐藏,子窗口显示 connect(&btn3,&QPushButton::released,this,&MainWidget::changeWin); //处理子窗口发送过来的信号 void (SubWidget::*funSognal)() = &SubWidget::mySignal; connect(&w,funSognal,this,&MainWidget::dealWin); //处理子窗口发送过来的信号(有参数) void (SubWidget::*testSognal)(int ,QString) = &SubWidget::mySignal; connect(&w,testSognal,this,&MainWidget::subSlot); //Lambda表达式,匿名函数对象 //C++11新增的新特性, 项目文件添加:CONFIG +=C++11 //QT配合信号一起使用, 非常的方便 QPushButton *btn6 = new QPushButton(this);//这里就不能使用普通的变量,而要使用指针变量,不然是局部变量会释放 btn6->setText("lambda表达式"); btn6->move(150,150); int a= 1,b=100; //这里的的=的意思是:把外部所有的局部变量、类中所有成员以值传递方式传递进来,唯一不足的是其传递进来的值以只读的方式进来 //this:类中所有成员以值传递方式传递进来 //&:把外部所有的局部变量 引用符号(慎用:在有类似动态创建空间的时候,值容易被破坏) //如果在大括号内部想对传递进来的值进行修改,需要在()后添加mutable关键字 connect(btn6,&QPushButton::released,[=]()mutable qDebug()<<"1231213213231213"; qDebug()<<a<<b; a=10; ); //当使用有参数的信号函数时,例如使用clicked; connect(btn6,&QPushButton::clicked,[=](bool isChecked) qDebug()<<isChecked; ); //自定义槽函数的实现 void MainWidget::mySlot() btn2->setText("I LOVE YOU"); void MainWidget::changeWin() //子窗口显示, w.show(); //本窗口隐藏 this ->hide(); void MainWidget::dealWin() //子窗口隐藏 w.hide(); //本窗口显示 this->show(); void MainWidget::subSlot(int a,QString str) qDebug()<<a<<str; MainWidget::~MainWidget()
以上是关于QT+lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章
Qt5中的lambda表达式和使用lambda来写connect
IntelliJ:求值lambda表达式在调试时引发编译错误
qt 5信号和槽的新形式,附带lambda表达式在这里的应用(偷懒的神器) qt官方蓝牙的btcha这个demot的个人解读