Qt信号槽如何传递参数

2023-05-16

Qt信号槽如何传递参数

利用Qt进行程序开发时,有时需要信号-槽来完成参数传递。带参数的信号-槽在使用时,有几点需要注意的地方,下面结合实例进行介绍。

1. 当信号与槽函数的参数数量相同时,它们参数类型要完全一致。

信号:

    void iSignal(int b);

槽:

void MainWindow::iSlot(int b)

{

    QString qString;

    qDebug()<<qString.number(b);

}

信号槽绑定:

    connect(this, SIGNAL(iSignal(int)), this, SLOT(iSlot(int)));

发送信号:

emit iSignal(5);

结果:

https://img-blog.csdn.net/20130926134901453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHljX2RhbmllbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

可以看出,参数已经成功传递。

2. 当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。

信号:

void iSignal(int a, float b);

槽:

void MainWindow::iSlot(int b)

{

    QString qString;

    qDebug()<<qString.number(b);

}

信号槽:

    connect(this, SIGNAL(iSignal(int, float)), this, SLOT(iSlot(int)));

发送信号:

emit iSignal(5, 0.3);

结果:

https://img-blog.csdn.net/20130926140518953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHljX2RhbmllbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

此外,在不进行参数传递时,信号槽绑定时也是要求信号的参数数量大于等于槽函数的参数数量。这种情况一般是一个带参数的信号去绑定一个无参数的槽函数。如下例所示。

信号:

void iSignal(int a, float b);

槽函数:

void MainWindow::iSlot() //int b

{

    QString qString = "I am lyc_daniel.";

    qDebug()<<qString;

}

信号槽:

connect(this, SIGNAL(iSignal(int, float)), this, SLOT(iSlot()));

发送信号:

emit iSignal(5, 0.3);

结果:

https://img-blog.csdn.net/20130926142752171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHljX2RhbmllbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

【总结】

Signals                                                                         slots

valueChanged(int,int)                                                       setRange(int,int)

valueChanged(int,int)                                                       setRange(int)

valueChanged(int,int)                                                       setRange()

valueChanged(int)           ××××错误××××         setRange(int,int)

valueChanged(int)                                                            setRange(int)

valueChanged(int)                                                           setRange()

valueChanged(QString)         ××××错误××××  setRange(int)

valueChanged()         ××××错误××××                setRange(int)

valueChanged()                                                   setRange()

1. 前面参数个数>=后面参数个数;

2. 前后参数类型一致。

同时满足以上两点即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt信号槽如何传递参数 的相关文章

  • Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster)优缺点分析

    Redis 单机模式 xff0c 主从模式 xff0c 哨兵模式 sentinel xff0c 集群模式 cluster xff0c 第三方模式优缺点分析 Redis 的几种常见使用方式包括 xff1a 单机模式主从模式哨兵模式 senti
  • tomcat开机自启动

    有两种方式可以实现 xff0c 一种是自启动脚本 一种是将tomcat注册为服务 xff0c 设置服务自启动 一 自启动脚本 1 添加tomcat启动脚本到开机自启动项目中 vim etc rc d rc local 增加以下内容 xff1
  • jeecgboot @Transactional捕获异常并拿到返回值

    64 Transactional 和 64 RestControllerAdvice 并不冲突 回滚的同时拦截异常返回需要的值给前端 64 Override 64 Transactional rollbackFor 61 Exception
  • @AliasFor 注解使用规则

    64 AliasFor 顾名思义 xff0c 表示别名 1 它可以注解到自定义注解的两个属性上 xff0c 表示这两个互为别名 2 注解是可以继承的 xff0c 但是不能用来继承父注解的某个属性值 xff0c 可以通过在子注解对于的属性上加
  • Docker Desktop修改默认安装路径?

    原理 xff1a 建立一个目录的软链接 用管理员身份打开cmd窗口 xff0c 然后运行命令 xff1a mklink j 34 C Program Files Docker 34 34 D Program Files Docker 34
  • java web项目打包成exe安装程序

    需求 xff1a 由于java web项目 xff0c 需要依赖mysql数据库 tomcat容器 jdk等 xff0c 部署需要一定技术支持才能够完成 xff0c 操作繁琐 xff0c 希望简化 目标 xff1a 制作一个exe一键安装相
  • http 请求参数包含? & 处理

    escape encodeURI encodeURIComponent 区别详解 JavaScript中有三个可以对字符串编码的函数 xff0c 分别是 xff1a escape encodeURI encodeURIComponent x
  • 多个项目共用一个redis

    redis 数据库是由一个整数索引标识 xff0c 而不是由一个数据库名称 默认情况下连接到数据库0 因此多个项目如果配置不做修改都会使用0号数据库 xff0c 会发生冲突 所以 每个项目配置不同的 database 即可解决
  • LoadRunner中参数化技术详解

    LoadRunner中参数化技术详解 LoadRunner在录制脚本的时候 xff0c 只是忠实的记录了所有从客户端发送到服务器的数据 xff0c 而在进行性能测试的时候 xff0c 为了更接近真实的模拟现实应用 xff0c 对于某些信息需
  • 23种设计模式类图

    下边是23种设计模式的类图大汇总 xff0c 23种设计模式解析请移步 http blog csdn net qq 25827845 article details 52932234 1 创建类模式 2 行为类模式 3 结构类模式
  • navicat 复制表结构到word文档做数据库设计格式问题解决

    需求 xff1a 写数据库设计文档 xff0c 需要设计数据字典 xff0c 贴表结构 xff0c 如果是几百张表 一个个填工作量很大 解决方案 xff1a 1 sql查询所有字段 2 整体复制到excel 3 拆分表 xff0c 调整列项
  • vue图片压缩上传组件修改

    判断逻辑 大于200KB 压缩上传 xff0c 否则不做处理上传原始图片 1 安装插件 yarn add image conversion 2 引入 import compressAccurately from 39 image conve
  • new ScriptEngineManager().getEngineByName(“js“)返回null

    问题出现的场景 xff1a 本地开发和生产环境都没问题 xff0c 测试环境 用的docker 报空指针 new ScriptEngineManager getEngineByName 34 js 34 返回null js替换 JavaSc
  • vue a-collapse的默认全部展开

    思路 xff1a activekey的值为默认展开的项 xff0c 要想全部展开 xff0c 就得把所有的key值都加到 activekey中 如下例子 xff0c activekey 61 39 1 39 默认展开第一个 要想全部展开就需
  • 软件工程——软件结构图设计(变换分析设计、事务分析设计、混合流设计)

    结构化设计 SD 是以结构化分析 SA 产生的数据流图为基础 xff0c 将数据流图按一定的步骤映射成软件结构图 SC 一 数据流的类型 结构化设计的目的是要把数据流图映射成软件结构 xff0c 根据数据流的特性 xff0c 一般可分为变换
  • Linux下Appium+Python移动应用自动化测试实战之“Android Emulator Headless”

    腊月二十九写的那篇手把手定位元素编写用例的文章 xff0c 没想到在4天的时间获得了2000多的阅读量 作为一个成熟的概念和框架 xff0c 没想到热度竟然还这么高 博主果断放弃了今天下午的10公里越野 xff0c 加快推出Android
  • Hbase系列---内置过滤器

    HBase为筛选数据提供了一组过滤器 xff0c 通过这个过滤器可以在HBase中的数据的多个维度 xff08 行 xff0c 列 xff0c 数据版本 xff09 上进行对数据的筛选操作 xff0c 也就是说过滤器最终能够筛选的数据能够细
  • org.apache.maven.plugin.war.WarMojo

    maven工程pom文件报错 xff0c org apache maven plugin war WarMojo 在pom文件中的 lt build gt 标签内加入如下代码 lt plugins gt lt plugin gt lt gr
  • js实现各种进制的转换

    使用Integer toString 进制数即可

随机推荐