使用lambda需要 配置c++11

所以在点.pro文件里面配置添加如下

CONFIG +=c++11

使用到qDebug 打印包含头文件

#include<QDebug>

lambda 表达式使用 代替槽如下

#include "mainwidget.h"
#include<QPushButton>
#include<QDebug>
mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
   b1.setParent(this);//this 是这个窗口。就是main函数构造的w
   b1.setText("close");
   b1.move(100,100);

   b2 = new QPushButton(this);//新建个空间给b2指针
   b2->setText("send");
//   connect(&b1,&QPushButton::pressed,this,&mainWidget::close   );
   //按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),接收动作类+作用域+函数(槽函数)
   connect(b2,&QPushButton::pressed,this,&mainWidget::myslot);
   //按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(窗口),控件类+作用域+函数(槽函数)
   connect(b2,&QPushButton::pressed,&b1,&mainWidget::hide);//hide 隐藏
   //按键(信号发出者) ,按键发出者的类 ::(作用域)类的函数(发送的信号),接收者(按键),控件类+作用域+函数(槽函数)


   this->setWindowTitle("老大");
   b3.setParent(this);
   b3.setText("切换到子窗口");
   b3.move(50,50);
   connect(&b3,&QPushButton::released,this,&mainWidget::changwindow);//按钮 和槽的联系
  // w.show();
   void (subwidget::*p_not)()=&subwidget::mySinal;//依靠类型指针,来区分重载函数;
   connect(&w,p_not,this,&mainWidget::dealsubwindows);//按钮 和槽的联系
   void (subwidget::*p_sinal )(int ,QString)=&subwidget::mySinal;//依靠类型指针(带参),来区分重载函数;
   connect(&w,p_sinal,this,&mainWidget::subwindows_printf);//按钮 和槽的联系


   /*lambda 表达式  c++11 增加的新特性
   *QT配合信号一起使用,非常方便
*/
   QPushButton *b4=new QPushButton(this);//创建一个按钮,指定父对象为this 这个基类窗口
   b4->move(150,150);
   int a=10,b=22;
   connect(b4,&QPushButton::clicked,
           [=](bool click )mutable
                {
                   qDebug()<<click;
                   qDebug()<<"111111";
                   qDebug()<<a<<b;
                   a=99;
                }
           /*[]代表函数的开始 ()函数的带参
            * 括号内可以传参
            *[b4,a,b]如此把指定参数传入
            * [=] 把所有局部变量 类中所有成员以值传递方式传入
            * [this]类中所有成员
            * [&]:把外部所有局部变量,引用符号;(就是符号引用,所以内存基本是没有初始化的,一般不会&)
            * []() mutable  添加关键字传入的值可变
            *
            *clicked 带参 是个flase,所以clicked属于一个信号,且带一个参

*/
           );

   resize(500,500);//设定窗口大小
}

void mainWidget:: myslot()//槽函数的定义,自定义槽
{
    b2->setText("123");//槽函数的函数动作


}

void mainWidget::changwindow()//槽函数处理
{
    this->hide();//关掉mainWidget基类  主窗口
    w.show();//子窗口 显示

}
void mainWidget::dealsubwindows()//槽函数处理
{

    this->show();//打开mainWidget基类  主窗口
    w.hide();//子窗口 关闭

}
void mainWidget::subwindows_printf(int a,QString str)
{
     qDebug()<< a<<str.toUtf8().data();//显示a和str
}
mainWidget::~mainWidget()
{

}

主窗口.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include<QPushButton>//添加按键头文件
#include <QWidget>
#include"subwidget.h"

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    mainWidget(QWidget *parent = 0);
    ~mainWidget();
    void myslot();//声明一个共有 ,自定义一个槽为共有成员
    void changwindow();//添加一个槽 关闭 主窗口 打开子窗口
    void dealsubwindows();//添加一个槽 关闭子 开主窗口
    void subwindows_printf(int a,QString str);//
private:  //添加两个私有成员 按键控件
    QPushButton b1;
    QPushButton *b2;
    QPushButton b3;//设置b3按钮

    subwidget w;//添加一个私有为子窗

};

#endif // MAINWIDGET_H

子窗口

c文件

#include "subwidget.h"
#include<QPushButton>
subwidget::subwidget(QWidget *parent) : QWidget(parent)
{

    this->setWindowTitle("小弟");//设置子窗口的标题
    b.setParent(this);//给b指定 父类
    b.setText("返回主窗口");//设置按钮文本

   connect(&b,&QPushButton::clicked,this,&subwidget::sendSlots);//
   //按键 按下 这个基类相应个槽函

     resize(500,500);//限制大小
}

void subwidget::sendSlots()
{

    emit mySinal();//槽里面发送个信号 必须有emit 关键字
    emit mySinal(250,QString("我是子窗口"));//发送带参信号
}

h文件

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include<QPushButton>//

class subwidget : public QWidget
{
    Q_OBJECT
public:
    explicit subwidget(QWidget *parent = 0);
    void sendSlots();//槽函数,响应按钮,发送信号
signals:
     /*信号必须有signals 关键字来声明
      * 信号没有返回值,但可以有参数
      * 信号就是函数的声明,只需声明,无需定义
      * 使用:emit mySignal();
      * */
    void mySinal();
    void mySinal(int,QString);//qT的字符串类型 QString
    /*信号名字已经相同,所以信号重载
     * 有重载的信号,需要用函数指针;
     * 用重载的信号,只能用指针
     * */
public slots:
//新加的窗口 私有成员 按键 b
private:
    QPushButton b;


};

#endif // SUBWIDGET_H
04-29 08:25