QT当类有多个不同类型的同名信号时如何处理QOverload?

news2024/12/25 23:57:09

我们在设计类的信号时也许也会像设计类方法一样,给予多种不同参数类型的重载版本,这样一来我们就可以应对不同类型的参数输入或者输出。
但我们在使用有重载的信号版本时就不那么方便了,QT系统没有那么智能,不会自动匹配,这个时候就可能遇到报错。

一、需求实例

我们以一个具体的例子来看,比如我们现在要给进度条加一个控制,这里用spinbox来控制进度条。我们试图通过spinbox的valuechanged来发送消息给progressbar的代码如下:

  ui->progressBar->setRange(0, 100);
    ui->spinBox->setRange(0,100);
    ui->spinBox->setSingleStep(5);
    ui->spinBox->valueChanged(1);
    connect(ui->spinBox, &QSpinBox::valueChanged, ui->progressBar, &QProgressBar::setValue);
   

看起来,上述代码没有问题,一运行,报错来了:
error: no matching function for call to ‘MainWindow::connect(QSpinBox*&, , QProgressBar*&, void (QProgressBar:😗)(int))’
connect(ui->spinBox, &QSpinBox::valueChanged, ui->progressBar, &QProgressBar::setValue);

 candidate function not viable: no overload of 'valueChanged' matching 'const char *' for 2nd argument

很显然,那是因为我们的sign中存在两个同名的valueChanged,我们打开spinbox的头文件就可以发现:
在这里插入图片描述
很显然,我们为了与progressBar的setValue(int)匹配,这里这里必须明确选择第一个,参数为int的valuechanged。

二、解决方案

1、方案一QOverload

重载调用QOverload::of,利用它来指定多个信号版本中的具体哪种类型参数:
QOverload<参数1类型, 参数2类型,…>::of(&同名的方法名)
修改后代码:

 connect(ui->spinBox, QOverload<int>::of(&QSpinBox::valueChanged), ui->progressBar, &QProgressBar::setValue);

完整代码:

  ui->progressBar->setRange(0, 100);
    ui->spinBox->setRange(0,100);
    ui->spinBox->setSingleStep(5);
    ui->spinBox->valueChanged(1);
    connect(ui->spinBox,  QOverload<int>::of(&QSpinBox::valueChanged),  ui->progressBar, &QProgressBar::setValue);
    

2、方案二static_cast

使用static_cast也可以解决,这里的方法比较霸道,不管你是什么类型的参数,这里强制转换为int类型

  connect(ui->spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui->progressBar, &QProgressBar::setValue);

三、看看效果

为了使我们的进度条有更丰富的控制效果,我们引入一个自动增长的和一个手动调节的增长效果。
在这里插入图片描述
这里的start按钮配合了一个 QTimeLine,具体代码:

  QTimeLine *timeLine = new QTimeLine(1000, this);
    timeLine->setFrameRange(0, 100);
    connect(timeLine, &QTimeLine::frameChanged, ui->progressBar, &QProgressBar::setValue);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实操案例三】进制转换、异常捕获、输出颜色设置、格式化字符串的设置等实例代码及运行效果图!

任务一&#xff1a;将指定的十进制数转换成二进制、八进制、十六进制 # 任务一&#xff1a;将指定的十进制数转换成二进制、八进制、十六进制 def fun():numint(input(请输入一个十进制整数&#xff1a;))print(num,的二进制数为&#xff1a;,bin(num)) # 第一种写法&#xff…

网线交叉、直连区别

欢迎来到东用知识小课堂&#xff01;一.网线常识网线常用的有&#xff1a;双绞线、同轴电缆、光纤等。双绞线可按其是否外加金属网丝套的屏蔽层而区分为屏蔽双绞线&#xff08;STP&#xff09;和非屏蔽双绞线&#xff08;UTP&#xff09;。从性价比和可维护性出发&#xff0c;大…

golang语言websocket百万长链接

是简单demo测试 前端 <html> <head><title>Simple client</title><script type"text/javascript">var ws;function init() {// Connect to Web Socketws new WebSocket("ws://localhost:8866/ws");// Set event handlers…

联合证券|再创纪录,外资狂买超1000亿!券商、期货板块持续活跃

A股今天全线上扬&#xff0c;沪指小幅走高&#xff0c;创业板、科创50指数体现强势&#xff1b;港股走势疲弱&#xff0c;恒生科技指数一度跌超2%。 详细来看&#xff0c;两市股指盘中震动上扬&#xff0c;午后全线走高&#xff0c;创业板指、科创50指数涨超1%&#xff1b;到收…

PCB板缺陷检测识别系统 YOLOv7

PCB板缺陷检测识别系统通过YOLOv7网络深度学习技术&#xff0c;对现场PCB是否存在缺陷部分进行实时分析检测&#xff0c;当检测到PCB本身存在缺陷的时候&#xff0c;立即抓拍存档告警方便后期针对性的进行调整改。YOLO系列算法是一类典型的one-stage目标检测算法&#xff0c;其…

CSS+JS 折叠

文章目录CSSJS 折叠效果CSSjQuery 鼠标经过显示详细信息CSSJS 折叠效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>折叠效果</title><style type"text/css">.collapse-box {width: 500px;borde…

FMC子卡设计资料原理图:FMC177-基于AD9361的双收双发射频FMC子卡

FMC177-基于AD9361的双收双发射频FMC子卡一、板卡介绍 FMC177射频模块分别包含两个接收通道与发射通道&#xff0c;其频率可覆盖达到70MHz~6GHz&#xff0c;AD9361芯片提供具有成本效益的实验平台&#xff0c;具有达到56MHz的瞬时带宽&#xff0c;更高的灵敏度&#xff…

Java 23种设计模式(2.创建者模式-单例设计模式)

1. 创建者模式 创建型模式分为&#xff1a; 单例模式工厂方法模式抽象工程模式原型模式建造者模式 什么是创建者模式&#xff1f; 创建型模式的主要关注点是“怎样创建对象&#xff1f;”&#xff0c;它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度…

Windows 下 VS Code 远程连接 Ubuntu 并配置免密登录

文章目录1.安装 Visual Studio Code2.安装必要的插件3.为本机生成 SSH 密钥对4.将公钥拷贝到 Ubuntu 上5.配置 Remote 插件6.关闭远程连接7.卸载 Visual Studio Code7.1 在控制面板中找到 Visual Studio Code 将其卸载7.2 删除之前安装过的插件7.3 删除用户信息和缓存信息1.安装…

BootStrap使用笔记+案例

前端开发 第三节BootStrap BootStrap BootStrap是别人写好的CSS样式&#xff0c;如何使用BootStrap&#xff1a; 下载BootStrap使用 在页面上引入BootStrap编写HTML时&#xff0c;按照BootStrap的规定来编写 自定制 开发版本&#xff1a;bootstrap.css 生产版本&#xf…

【HTML | CSS】春节将至,为网页挂上精美的灯笼吧(附源码)程序员的浪漫

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

在线支付系列【2】支付宝和微信支付发展史

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录支付宝发展史起步阶段发展阶段上升阶段微信支付发展史支付宝 支付宝是阿里巴巴集团于 2004 年推出的一款第三方支付的产品&#xff0c;目前隶属于蚂蚁金服&#xff08;杭州&#xff09;网络技术…

2023年最推荐苹果、华为、荣耀:一场“以人为中心”的口碑竞技

消费者需求是市场发展的风向标。经济学界早有洞察&#xff0c;诺贝尔经济学奖得主哈耶克曾提出“消费者主权”理论&#xff0c;认为生产什么&#xff0c;生产多少&#xff0c;应当由消费者的意愿和偏好决定。手机市场也是如此&#xff0c;存量竞争下&#xff0c;消费者进一步掌…

软件测试复习09:集成测试、系统测试、验收测试、回归测试

作者&#xff1a;非妃是公主 专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录集成测试集成测试方法自顶向下自底向上系统测试验收测试回归测试集成测试 把模块拼装到一起&#…

【电力系统经济调度】多元宇宙算法求解电力系统多目标优化问题(Matlab实现)【电气期刊论文复现】

目录 0 概述 1 环境经济调度数学模型 2 多元宇宙算法 3 运行结果 4 Matlab代码实现 目录 0 概述 1 环境经济调度数学模型 2 多元宇宙算法 3 Matlab代码实现 3.1 主函数&#xff1a; 3.2 目标函数 4 运行结果 0 概述 多元宇宙算法求解电力系统多目标优化算法有…

【GD32F427开发板试用】CAN总线了解和回环测试

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;HonestQiao CAN总线是个好东西&#xff0c;据说用了的都说好。只要是09年之后的车都有CAN总线&#xff0c;要是摸得透的话&#xff0c;你还能通…

微信小程序开发尚学堂 介绍 项目结构 组件

一、微信小程序介绍1. 微信小程序介绍微信小程序&#xff0c;简称小程序&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用”触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。说明&#xff1a;小程序是需要下载的&#xff0c;小程序的占用…

用于多核DSP开发的核间通信

TI的多核DSP以TMS320C6678为例&#xff0c;它是多核同构的处理器&#xff0c;内部是8个相同的C66x CorePac。对其中任意一个核的开发就和单核DSP开发的流程是类似的。   但是如果仅仅只是每个核独立开发&#xff0c;那么很难体现出多核的优势。要充分发挥多核处理器的性能&am…

Docker 应用实践-容器篇

在 Docker 镜像篇中&#xff0c;我们了解到 Docker 镜像类似于模板&#xff0c;那么 Docker 容器就相当于从模板复制过来运行时的实例&#xff0c;Docker 容器可以被创建、复制、暂停和删除等。 每一个 Docker 容器在运行时都是以镜像为基础层&#xff0c;并在镜像的基础上创建…

PWM 应用

1.PWM 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/pwm 目录下。8 个以 pwmchipX&#xff08;X 表示数字 0~7&#xff09;命名的文件夹&#xff0c;这八个文件夹其实就对应了 I.MX6U的 8 个 PWM 控制器&#xff0c; I.MX6U 总共有 8 个 PWM 控制器。2.进入到…