QT+lambda 表达式
阅读原文时间:2023年07月14日阅读:2

#include "mainwidget.h"

#include

#include
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{

// QPushButton btn1;
// QPushButton btn2;

btn1.setParent(this);  
btn1.setText("colse");  
btn1.move(,);

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(,);  
this ->setWindowTitle("苍老师");  
btn3.setParent(this);  
btn3.setText("换到波老师");  
btn3.move(,);

//显示子窗口  

// 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(,);  
int a= ,b=;  
//这里的的=的意思是:把外部所有的局部变量、类中所有成员以值传递方式传递进来,唯一不足的是其传递进来的值以只读的方式进来  
//this:类中所有成员以值传递方式传递进来  
//&:把外部所有的局部变量 引用符号(慎用:在有类似动态创建空间的时候,值容易被破坏)  
//如果在大括号内部想对传递进来的值进行修改,需要在()后添加mutable关键字  
connect(btn6,&QPushButton::released,\[=\]()mutable {

    qDebug()<<"";  
    qDebug()<<a<<b;  
    a=;  
});  
//当使用有参数的信号函数时,例如使用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()
{

}