Qt学习笔记4——Lambda表达式,信号和槽总结

  • P12. 信号连接信号
  • P13. Qt4版本信号和槽连接
  • P14. Lambda表达式
  • P15. 信号槽的总结
  • (P12. 信号连接信号)

 

前面是信号连接信号,后面是信号连接槽函数;关键字 connect 可以连接信号和信号

断开信号用 disconnect ,用法和 connect 一样

1     //无参信号和槽连接
2     void(Teacher::*teachersig2)(void)=&Teacher::hungry;
3     void(Student::*studentslot2)(void)=&Student::treat;
4     connect(zt,teachersig2,st,studentslot2);
5     //信号连接信号
6     connect(btn,&QPushButton::clicked,zt,teachersig2);

 

  • (P13. Qt4版本信号和槽连接)
  • 信号可以连接信号
  • 一个信号 可以连接 多个槽函数
  • 多个信号 可以连接 同一个槽函数
  • 信号和槽函数的参数 类型必须对应
  • 信号和槽的参数个数:信号的参数个数,可以大于槽函数的参数个数(信号参数不多余的部分,类型要和槽函数参数类型一一对应)

Qt4 版本写法:  connect(信号的发送者,SIGNAL(信号),信号的接收者,SLOT(槽函数))

优点:参数直观;  缺点:编译器不会检测参数类型  (不推荐使用 Qt4 版本写法)

  • (P14. Lambda表达式)

如果Qt是5.4之前的版本,要在.pro文件中添加 CONFIG += c++11

  • Lambda表达式

  声明:  [] () {} ;

  调用:  [] () {} () ;

  [] 标识符 匿名函数,里面可以写:

    =  值传递(一般用 = 足以)

    &  引用传递

  () 参数

  {} 实现体

  mutable  修饰值传递变量,可以修改拷贝出的数据,改变不了本体(mutable 写到() 和 {} 之间)

    int m=10;
    [=]()mutable{
        m+=100;
        qDebug()<<"m="<<m;
    }();
    qDebug()<<"m="<<m;

运行结果

m=110

m=10

 

  返回值  [] () ->int {...; renturn...;};  (->返回值类型 写到() 和 {} 之间)

  • Lambda 表达式可以写到 connect 中槽函数(最后一个位置)的位置

 

1     //利用Lambda表达式,实现点击按钮,关闭窗口
2     QPushButton * btn2 = new QPushButton(this);
3     btn2->setText("关闭");
4     btn2->move(100,0);
5     connect(btn2,&QPushButton::clicked,this,[=](){
6         this->close();
7     });

(这里的 Lambda 表达式不用再写调用,即不用再多写() ;如果最后一个位置是 Lambda 表达式,第三个位置的 this 可以省略(4个位置变3个位置,少一个逗号))

  • (P15. 信号槽的总结)

posted @ 2022-08-01 17:31  我会变强的  阅读(658)  评论(0编辑  收藏  举报