QT--信号和槽机制

信号槽

  • 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。
  • 优点:松散耦合,信号发出端和接收端可以毫无关联,如果要关联就用connect函数。

connect函数使用

在这里插入图片描述

QPushButton* button = new QPushButton("关闭窗口", this);
this->resize(1280, 720);
//信号与槽函数
connect(button, &QPushButton::clicked, this, &Widget::close);

自定义信号与槽

  • 1,确定功能
  • 2,添加发送类和接收类
  • 3,发送类声明信号,接收类声明并实现槽函数
    -信号:信号返回值为void,参数可以存在,仅声明不需要实现,可以重载
signals:
    void send();

-槽函数:一般在public slots里面写,对于一些高版本qt来说,也可以写到public或全局变量;返回值void,参数可以存在,需要声明并实现,可以重载

  • 4,创建发送对象,接收对象

槽函数使用拓展

  • 一个信号可以链接多个槽函数,发送一个信号有多个处理信号
    -需要写多个connect链接
    -槽函数的执行顺序是随机的, 和connect函数的调用顺序没有关系(qt5后就是按connect顺序执行)
    -信号的接收者可以是一个对象或者是多个对象
  • 一个槽函数可以链接多个信号,多个不同的信息,处理动作是相同的
    -写多个connect就可以
  • 信号可以链接信号
    -信号接收者可以补不出来接收的信号,继续发出新的信号->传递了数据,并没有处理
    在这里插入图片描述
  • 信号槽是可以断开的
    在这里插入图片描述

Lambda表达式

  • Lambda表达式是C++11最重要也是最常用的特性之一,是现代编程语言的一个特点,简洁,提高了代码的效率并且可以使程序更加灵活,Qt是完全支持c++语法的,因此在Qt中也可以使用Lambda表达式。
  • Lambda表达式就是一个匿名函数,语法格式如下
[capture](params)opt -> ret {body;};
capture:捕获列表
params:参数列表
-opt:函数选项
-ret:返回值类型
- body:函数体
//示例代码->匿名函数的调用:
int ret=[](int a)-> int
return at1;
}(100);
  • 关于Lambda表达式的细节介绍:
    -1.捕获列表: 捕获一定范围内的变量
    []-不捕捉任何变量
    [&]-捕获外部作用域中所有变量,并作为引用在函数体内使用(按引用捕获 )
    [=]-捕获外部作用域中所有变量,并作为副本在函数体内使用(按值捕获 )。
    [=,&foo]-按值捕获外部作用域中所有变量,并按照引用捕获外部变量 foo。
    [bar]-按值捕获 bar 变量,同时不捕获其他变量
    [&bar]-按值捕获 bar 变量, 同时不捕获其他变量
    [this]-捕获当前类中的this指针
    -2,让lambda表达式拥有和当前类成员函数同样的访问权限如果已经使用了 &或者=,默认添加此选项参数列表: 和普通函数的参数列表一样

相关推荐

  1. 信号(Qt)

    2024-03-24 23:28:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 23:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 23:28:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 23:28:03       82 阅读
  4. Python语言-面向对象

    2024-03-24 23:28:03       91 阅读

热门阅读

  1. (c/c++)——线程的基础使用

    2024-03-24 23:28:03       37 阅读
  2. rust - 将bitmap位图文件另存为png格式

    2024-03-24 23:28:03       41 阅读
  3. PostgreSQL与MySQL对比

    2024-03-24 23:28:03       46 阅读
  4. jvm底层

    jvm底层

    2024-03-24 23:28:03      36 阅读
  5. python

    2024-03-24 23:28:03       44 阅读
  6. 【机器学习-09】特征工程

    2024-03-24 23:28:03       34 阅读
  7. js和jsp的区别

    2024-03-24 23:28:03       37 阅读
  8. 组织碳管理--常见问题解答FAQ

    2024-03-24 23:28:03       40 阅读
  9. 【LeetCode-45.跳跃游戏】

    2024-03-24 23:28:03       38 阅读
  10. react native 总结

    2024-03-24 23:28:03       42 阅读
  11. C++面向对象:智能指针讲解

    2024-03-24 23:28:03       35 阅读