04_Qt信号与槽机制

2023-11-12


当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号
signal。这种发出是没有目的的,类似广播。
如果有对象对这个信号感兴趣 ,它就会使用连接 connect函数,意思是,将想要 处理的信号和自己的一个函数为槽 slot绑定来处理这个信号。
也就是说,当信号发出时,被连接的槽函数会自动被回调。

一、信号和槽

1.1、Qt5的书写方式

connect(&b1,&QPushButton::pressed,this,&Widget::close);
/* &b1:信号发出者,指针类型
 * &QPushButton::pressed:处理的信号, &发出者的类名::信号名字
 * this:信号接受者
 * &Widget::close:槽函数,信号处理函数  &发出者的类名::信号名字
 */

1.1.1、处理子窗口的信号不带参数

注意这样会产生二义性

connect(&subWin,&SubWideget::mySignal,this,&Widget::dealSub);
connect(&subWin,&SubWideget::mySignal,this,&Widget::dealSlot);

1.1.2、处理子窗口的信号带参数(使用函数指针)

void (SubWideget::*funSignal)() = &SubWideget::mySignal;
connect(&subWin,funSignal,this,&Widget::dealSub);

void(SubWideget::*testSignal)(int,QString) = &SubWideget::mySignal;
connect(&subWin,testSignal,this,&Widget::dealSlot);

1.2、Qt4的书写方式

Qt4信号连接:

  1. 使用了LSIGNAL和TSLOT这两个宏,将两个函数名转换成了字符串。
  2. 不方便检查错误

格式:connect(信号的发出者(指针类型), 处理的信号(SIGNAL(信号名字)), 信号的接受者, 信号处理的函数(SLOT(槽函数)));

connect(&subWin,SIGNAL(mySignal()),this,SLOT(dealSub()));  //不带参数
connect(&subWin,SIGNAL(mySignal(int,QString)),this,SLOT(dealSlot(int,QString))); //带参数

1.3、Lambda表达式(匿名函数对象)

C++11中添加的新特性,需要在项目文件中添加:CONFIG += C++11
在Qt中配合信号一起使用,非常方便

  1. 不带参数
QPushButton *b4 = new QPushButton(this);
b4->setText("Lambda表达式");
b4->move(400,300);
int a =10,b=100;
connect(b4,&QPushButton::released,
            //[]里面可以传一个变量也可以传多个变量 [b4,a,b]
            //=:把外部所有的局部变量、类中所有成员以值传递方式
            //this :类中所有成员以值传递方式
            //&:把外部所有局部变量,引用符号
            [=]()
            {
                b4->setText("123");
                qDebug()<<"你好";
                qDebug()<<a<<b;
            }
            );
  1. 带参数
connect(b4,&QPushButton::clicked,
            [=](bool isCheck)
            {
                qDebug()<<isCheck;
                qDebug()<<a<<b;

            }
            );

二、自定义信号槽

2.1、信号

  1. 信号必须有singnals关键字来声明
  2. 信号没有返回值,但可以有参数
  3. 信号就是函数的声明,只需声明,无需定义
  4. 使用emit在恰当的位置发信号
  5. 信号可以重载
signals:
    void mySignal();
    void mySignal(int,QString);//QString是Qt中的字符串

2.2、槽

  1. 槽函数是普通函数,作为成员函数,会受到public,private,protected的影响
  2. 槽函数需要和信号一致(参数和返回值)
  3. 由于信号没有返回值,则槽函数也没有返回值
  4. 任意成员函数,普通全局函数,静态函数,Lambda表达式都可以作为槽函数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

04_Qt信号与槽机制 的相关文章

随机推荐

  • java锁杂谈

    关于java锁 内容蛮多的 这篇文章只谈一部分见解 所以取名为杂谈 没有大纲 等后面锁的体系建立起来后再整理一下 那么开始吧 Java 锁有哪些 各种各样 网传15种有余 这些锁的底层大多是AQS实现的 比如 ReentrantLock可重
  • 搜集Shader一些参数(为自己)

    Shader ConfigurableShaders Rendering Properties Header Stencil Stencil Stencil ID 0 255 Float 0 ReadMask ReadMask 0 255
  • PLC控制运料小车往返运动

    实验要求 1 实验控制电路应该具有控制回路的总控制 其功能是启动和停止控制电路 它可以使小车停站的位置行程开关处于压合的位置 脱离延迟控制往返时为启动状态 及零压保护电路功能 2 小车沿轨道自动往返运动时 小车在行程内的任何位置时都可以起动
  • c++实现创建一个cocos2d-x的场景类

    文件 http pan baidu com s 1ntlu14H createVSClass cpp 定义控制台应用程序的入口点 include stdafx h include
  • RocketMQ消费者端消息列队六种负载均衡算法分析

    在RocketMQ启动的时候会启动负载均衡线程 过程如下 DefaultMQPullConsumerImpl start mQClientFactory start 上面点进去 gt MQClientInstance start rebal
  • 区间调度1.找到移除区间的最小数量

    求出最多有几个互不相交的区间 则做法是按end升序排序 选择一个结束最早的x 然后把区间中与它冲突的全部删除 别的区间的start要大于这个区间的end 接着重复步骤直到堆中没有区间 不用堆只用数组的话可以用一个for循环遍历整个数组 记录
  • 火猴之arc以及gesturemanager的应用(firemonkey)

    效果 目标 1 向左滑动 环形进度条从0 100 2 向右滑动 环形进度条从100 0 思路 1 放置3个arc组件 rotationangle设置为270 stroke的thickness设为30 2 放置gesturemanager组件
  • [Windows] 在磁盘管理中,脱机选项不可选,无法将磁盘脱机

    1 在磁盘管理中遇到无法脱机磁盘的情况 脱机选项不可选 可能是由于将虚拟内存设置到该磁盘上导致的 2 进入电脑属性 gt 高级系统设置 gt 高级 gt 性能设置 gt 高级 gt 更改 3 取消在该磁盘上设置的虚拟内存 4 再进入磁盘管理
  • Qt 智能指针

    C 11 标准中的提供的智能指针 在 Qt 中也提供了类似的替代功能 并且比 C 11 标准中提供的功能还要强大 所以如果我们使用 Qt 作为基础库 Qt 智能指针包括 QSharedPointer QScopedPointer QScop
  • 【react】js表达式和js语句(代码)的区别

    何为表达式 一定注意区分 js语句 代码 与 js表达式 1 表达式 一个表达式会产生一个值 可以放在任何一个需要值的地方 下面这些都是表达式 1 a 2 a b 3 demo 1 4 arr map 5 function test 2 语
  • Tomcat载入配置

    错误出现原因 未配置环境变量
  • (N1盒子) Openwrt 下 docker 容器访问互联网故障排除

    环境 硬件 N1盒子 Openwrt版本 openwrt flippy 60 o 情况描述 先是跑了个运行php的docker容器 日志里报错信息为 cURL error 7 Failed to connect to 域名 port 端口号
  • 《基于Linux物联网综合项目》常见问题汇总fae

    关于该课程说明 1 本课程目标 通过web浏览器访问服务器 实现登录 注册 数据库操作 远程操控硬件 采集环境信息 远程监控 拍照 图片显示等功能 将单片机 linux html 摄像头 数据库等知识点融入到一个项目中 2 什么群体适合学习
  • 自然语言处理卷积神经网络c 代码,卷积神经网络CNN 在自然语言处理中的应用

    序言 CNN在文本分类中取得了不俗的结果 而运用在这里的卷积可以分为1d 2d甚至是3d的 我们知道 CNN一般用来做图像 图像是可以通过预处理 将每幅照片都处理成一样的size的 也就是height和width具有一样的像素值 然后用一个
  • SPRINGBOOT学习记录

    SPRINGBOOT 1 入门 1 1 springBoot具体流程 1yaml 配置文件 2 自动装配 3集成web框架 4 集成数据库 5分布式开发 Dubbo rpc zookeeper 6 swagger 接口文档 7 任务调度 8
  • 图论--差分约束

    小引入 如果一个系统由n个变量和m个约束条件组成 形成如xi xj lt k ij 1 n 的不等式 则称其为查分约束系统 写成一个矩阵形式的不等式组的话则系数有且仅有一个1和一个 1 解这种不等式组为何会与图论扯上关系呢 在我们求解最短路
  • kindle刷机ttl_[原创]只需USB线对Kindle 3修砖的小白教程

    文章的最后有笔者用的电池测试方法和笔者在网盘上传的文件链接 正式开工 1 运行ATK 把i MX CPU设为iMX35 TO2 Device memory initial设为MDDR Host Setting设成USB 2 连接Kindle
  • WCF系列(五) -- 也谈序列化(下)

    1 DataContractSerializer支持的类型 2 1 1 用 DataContract 属性标记的类型 2 1 2 net 原生类型
  • 在Visual Studio 2017 中编写C#安装NuGet、使用元组特性的详细步骤

    主要是解决一下小白的迷茫 一 安装NuGet管理器 1 打开vs2017 打开 工具 扩展与更新 2 左侧目录点 联机 右上侧搜索栏输入 Nuget 搜索 3 下载NuPack NuGet Packager扩展 一次点击可能会下载不成功 那
  • 04_Qt信号与槽机制

    文章目录 一 信号和槽 1 1 Qt5的书写方式 1 1 1 处理子窗口的信号不带参数 1 1 2 处理子窗口的信号带参数 使用函数指针 1 2 Qt4的书写方式 1 3 Lambda表达式 匿名函数对象 二 自定义信号槽 2 1 信号 2