当前位置: 首页 > article >正文

Qt, C++数据类型扩展问题

Qt项目中ObjectDic类的类型扩展与代码优化前言在Qt项目开发中我们经常会遇到需要处理不同类型数据的情况尤其是当涉及到负数时类型的选择就显得尤为重要。本文将详细介绍如何在Qt项目中扩展ObjectDic类的类型支持从无符号整数扩展到支持负数的有符号整数并优化相关代码结构。一、问题背景在我们的项目中ObjectDic类用于存储和管理设备的参数信息包括最小值(min)、最大值(max)、默认值(defVal)和当前值(curVal)。最初这些值都使用quint32类型存储这导致无法表示负数限制了参数的范围。二、解决方案1. 类型扩展从quint32到qint64首先我们需要将ObjectDic类中的相关成员变量类型从quint32改为qint64以支持负数// 修改前quint32 min;quint32 max;quint32 defVal;quint32 curVal;// 当前值// 修改后qint64 min;qint64 max;qint64 defVal;qint64 curVal;// 当前值同时我们需要更新相关的函数签名确保类型一致性// 修改前boolcheck(uint32 value);SetResultsetVal(quint32 value);SetResultsetVal(quint32 value,boolcheckChange);SetResultsetValNoEmitChanged(quint32 value);quint32getVal();// 修改后boolcheck(qint64 value);SetResultsetVal(qint64 value);SetResultsetVal(qint64 value,boolcheckChange);SetResultsetValNoEmitChanged(qint64 value);qint64getVal();2. 根据类型设置默认值为了确保不同类型的参数都有合理的默认值我们实现了根据type类型设置默认值的功能// 根据类型设置默认的min、max和defVal值voidsetDefaultValuesByType(ObjectDic*objDic){switch(objDic-type){case0:// UINT (无符号整数)objDic-min0;objDic-max0xFFFFFFFF;// 32位无符号整数最大值objDic-defVal0;break;case1:// INT (有符号整数)objDic-min(qint64)-2147483648LL;// 32位有符号整数最小值objDic-max2147483647;// 32位有符号整数最大值objDic-defVal0;break;case2:// BOOL (布尔值)objDic-min0;objDic-max1;objDic-defVal0;break;case3:// REAL (实数)objDic-min-3.402823466e38;// 32位浮点数最小值objDic-max3.402823466e38;// 32位浮点数最大值objDic-defVal0;break;default:// 默认情况objDic-min0;objDic-max0xFFFFFFFF;// 32位无符号整数最大值objDic-defVal0;break;}}3. 代码重构封装重复逻辑为了避免代码重复我们将设置默认值的逻辑封装成了两个函数// 根据类型设置默认的min、max和defVal值voidsetDefaultValuesByType(ObjectDic*objDic);// 根据类型设置默认的max值voidsetDefaultMaxByType(ObjectDic*objDic);这样在不同的地方我们只需要调用这些函数而不需要重复编写相同的switch语句提高了代码的可维护性。4. 修复负数表示问题在实现过程中我们遇到了一个有趣的问题当设置objDic-min -2147483648;时实际运行时min的值却变成了2147483648。原因分析在C中-2147483648会被解析为-(2147483648)而2147483648超出了32位有符号整数的范围32位有符号整数的最大值是2147483647导致编译器将其视为无符号整数取负后得到正数2147483648。解决方案使用(qint64)-2147483648LL来确保这个值被正确解析为64位有符号整数的最小值。5. 优化显示方式为了提高用户体验我们将表格中Min、Max和Default值的显示从十六进制改为十进制// 修改前QTableWidgetItem*minItemnewQTableWidgetItem(QString(0x%1).arg(QString::number(obj-min,16).toUpper()));QTableWidgetItem*maxItemnewQTableWidgetItem(QString(0x%1).arg(QString::number(obj-max,16).toUpper()));QTableWidgetItem*defaultItemnewQTableWidgetItem(QString(0x%1).arg(QString::number(obj-defVal,16).toUpper()));// 修改后QTableWidgetItem*minItemnewQTableWidgetItem(QString::number(obj-min));QTableWidgetItem*maxItemnewQTableWidgetItem(QString::number(obj-max));QTableWidgetItem*defaultItemnewQTableWidgetItem(QString::number(obj-defVal));三、修改的文件ObjectDic.h修改成员变量类型和函数签名ObjectDic.cpp更新函数实现XmlUtil.cpp添加默认值设置函数优化参数解析逻辑Ui_Prm.cpp修改显示方式ServoDrive.cpp更新参数解析逻辑四、遇到的问题及解决方案1. 类型转换问题问题从quint32转换到qint64时需要确保所有相关的函数和调用都进行相应的更新。解决方案全局搜索所有使用这些变量的地方确保类型一致。2. 负数表示问题问题-2147483648在C中会被错误解析为正数。解决方案使用(qint64)-2147483648LL来确保正确的负数表示。3. 默认值设置问题问题不同类型的参数需要不同的默认值范围。解决方案根据type类型设置不同的默认值并封装成函数以避免代码重复。五、总结通过这次修改我们成功地扩展了ObjectDic类的类型支持使其能够处理负数同时优化了代码结构提高了可维护性。主要完成了以下工作将ObjectDic类中的min、max、defVal、curVal类型从quint32改为qint64支持负数实现了根据type类型设置默认值的功能封装了重复的默认值设置逻辑提高代码可维护性修复了负数表示的问题优化了参数的显示方式从十六进制改为十进制这些修改不仅解决了当前的问题也为后续的功能扩展奠定了基础。通过合理的类型选择和代码重构我们的项目变得更加健壮和可维护。六、代码优化建议使用枚举类型可以将type的值定义为枚举类型提高代码的可读性添加类型检查在设置值时添加类型检查确保值的类型与参数类型匹配使用常量定义将各种类型的最大值和最小值定义为常量提高代码的可维护性添加单元测试为类型转换和默认值设置添加单元测试确保功能的正确性七、结语类型扩展是软件开发中常见的需求尤其是当需要处理负数或更大范围的值时。通过合理的类型选择和代码重构我们可以使代码更加健壮、可维护同时提高用户体验。希望本文的内容对您有所帮助发布时间2026-03-30标签Qt, C, 类型扩展, 代码优化

相关文章:

Qt, C++数据类型扩展问题

Qt项目中ObjectDic类的类型扩展与代码优化 前言 在Qt项目开发中,我们经常会遇到需要处理不同类型数据的情况,尤其是当涉及到负数时,类型的选择就显得尤为重要。本文将详细介绍如何在Qt项目中扩展ObjectDic类的类型支持,从无符号整…...

从零开始理解JVM内存模型:如何避免OOM错误的7个实用技巧

从零开始理解JVM内存模型:如何避免OOM错误的7个实用技巧 第一次在线上环境遇到OOM错误时,我盯着控制台那行刺眼的java.lang.OutOfMemoryError整整愣了三分钟。那是一个看似普通的周二下午,我们的订单处理系统突然开始拒绝服务,而监…...

大麦智能抢票系统:告别手速极限的终极解决方案

大麦智能抢票系统:告别手速极限的终极解决方案 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票而烦恼吗&…...

mitmproxy实战:从环境搭建到HTTPS抓包全攻略

1. 认识mitmproxy:你的网络调试瑞士军刀 第一次听说mitmproxy时,你可能觉得这是个复杂的安全工具。但实际用过后就会发现,它就像网络调试领域的瑞士军刀,能解决各种数据抓包难题。简单来说,mitmproxy是个开源的交互式中…...

Qwen2.5-14B-Instruct+Pixel Script Temple:高校戏剧系AI辅助教学实战案例

Qwen2.5-14B-InstructPixel Script Temple:高校戏剧系AI辅助教学实战案例 1. 项目背景与价值 在高校戏剧教育领域,剧本创作一直是教学难点。传统教学模式下,学生需要花费大量时间在格式规范、基础场景构建等基础性工作上,而教师…...

多宽带联网(五) OpenWrt中MWAN3高级策略分流实战(游戏加速、视频优化场景)

1. MWAN3策略分流的核心价值 家里拉了两条宽带却发现刷视频卡、打游戏延迟高?这种情况我遇到过太多次了。去年给朋友家调试网络时,他同时接了电信和联通两条200M宽带,但看4K视频还是缓冲,玩外服游戏延迟总在200ms以上。后来用Open…...

PFC(5.0)模拟:GBM模型(grain- based model ) pb-sj或pb-...

PFC(5.0)模拟:GBM模型(grain- based model ) pb-sj或pb-pb 单轴压缩。 模拟花岗岩等矿物晶体岩石,多种矿物晶体模型,其中矿物种类 数量分布可以自定义。 可以监测sj裂纹,和各矿物内裂纹。PFC5.0的GBM模型玩岩石破裂是真…...

双轴光伏智能跟踪系统,怎么让光伏发电效率提上来的?

做光伏相关开发和落地的朋友,应该都绕不开一个核心痛点:传统固定式光伏的光能利用率,一直有明显的天花板。今天就用通俗的方式,拆解WZ HELIO这套双轴智能跟踪系统,看看它是怎么解决这个行业老问题的。先搞懂核心逻辑&a…...

GLM-OCR服务监控与运维指南:使用Prometheus与Grafana搭建看板

GLM-OCR服务监控与运维指南:使用Prometheus与Grafana搭建看板 想象一下,你负责的GLM-OCR服务正在线上稳定运行,突然接到业务方反馈,说图片识别接口响应变慢了。你第一反应是什么?是登录服务器看日志,还是去…...

Wan2.2-I2V-A14B效果对比:LSTM时序预测辅助下的动态剧情生成

Wan2.2-I2V-A14B效果对比:LSTM时序预测辅助下的动态剧情生成 1. 引言 想象一下,当你输入一段文字描述,AI不仅能生成对应的视频,还能像专业导演一样把控剧情节奏和情感起伏。这正是Wan2.2-I2V-A14B结合LSTM时序预测技术带来的突破…...

3个核心技巧:Element Plus效率提升与性能优化指南

3个核心技巧:Element Plus效率提升与性能优化指南 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus 副标题:面向初中级开发者的Element…...

Wan2.2-T2V-A5B常见错误排查:运行失败、生成卡顿的解决方法

Wan2.2-T2V-A5B常见错误排查:运行失败、生成卡顿的解决方法 1. 问题概述与快速诊断 Wan2.2-T2V-A5B作为一款轻量级文本到视频生成模型,虽然在资源消耗和响应速度上具有优势,但在实际使用过程中仍可能遇到运行失败或生成卡顿的问题。这些问题…...

可视掏耳勺哪个牌子好?用什么掏耳朵最好?掏耳勺神器新款第一名

用什么掏耳朵最好?如今耳道护理成为家庭日常刚需,可视掏耳勺凭借“边看边清洁”的核心优势,彻底解决了传统盲掏易戳伤耳道、推深耳垢的痛点,成为越来越多人的首选。但当前可视掏耳勺市场陷入参数内卷,不少品牌盲目追求…...

手把手教你用AI超分镜像:低清图片3倍放大,细节修复超简单

手把手教你用AI超分镜像:低清图片3倍放大,细节修复超简单 1. 为什么你需要这个AI超分工具? 你是不是也遇到过这些头疼的情况? 翻出十几年前的老照片,想打印出来,却发现画面模糊得像蒙了一层雾。从网上下…...

iOS 版本nethack如何更换图形包-iNetHack2

这个iNetHack2这个应该我都没有找到设置按钮。后来无意中在贴吧中看到的。原来它的设置竟然在iOS的系统设置之中,是我少见多怪了,这可能是我见过的App 第1个在系统设置中设置的。UI中的Tileset 设置成Tiles32的界面风格就与nethack官方的UI一致了。...

AI写专著必备攻略:专业工具推荐,轻松开启学术专著创作之旅

学术专著写作困境与AI工具解决方案 学术专著的严谨性,离不开大量资料和数据的支持。资料的搜集和数据整合,往往是写作过程中最为繁琐和耗时的环节。研究者必须全面检索国内外的前沿文献,以确保这些文献的权威性和相关性,同时还要…...

FastAPI 2.0流式AI接口上线前必须做的4项压力测试:QPS突破1200+的实测阈值与熔断配置清单

第一章:FastAPI 2.0流式AI接口压力测试全景认知FastAPI 2.0 引入了对异步流式响应(如 StreamingResponse)的深度优化,使大语言模型(LLM)类接口可原生支持 Server-Sent Events(SSE)、…...

5个步骤掌握LibreCAD跨平台部署:从安装到精通的开源解决方案指南

5个步骤掌握LibreCAD跨平台部署:从安装到精通的开源解决方案指南 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/pa…...

如何快速为AMD 780M APU解锁隐藏性能:完整优化教程

如何快速为AMD 780M APU解锁隐藏性能:完整优化教程 【免费下载链接】ROCmLibs-for-gfx1103-AMD780M-APU ROCm Library Files for gfx1103 and update with others arches based on AMD GPUs for use in Windows. 项目地址: https://gitcode.com/gh_mirrors/ro/RO…...

别再只会看原理图了!用Multisim仿真带你深入理解运放的“虚短虚断”与反馈

用Multisim仿真破解运放"虚短虚断"的底层逻辑 在电子电路设计中,运算放大器就像一位沉默的魔术师,用"虚短"和"虚断"两个基本概念演绎着各种精妙的信号处理戏法。但很多工程师在学习阶段只是机械记忆这两个术语&#xff0c…...

DeerFlow2.0 Docker + 本地 Ollama qwen3.5:9b 部署指南

DeerFlow2.0 Docker 本地 Ollama qwen3.5:9b 部署指南 实现 Token 自由!!!本地模型免费 :) 1. 前提条件 Windows 11 家庭版(版本号 25H2)Docker Desktop 已安装并运行WSL2 已安装并配置Olla…...

如何用Obsidian Image Converter实现图像高效管理?超实用技巧分享

如何用Obsidian Image Converter实现图像高效管理?超实用技巧分享 【免费下载链接】obsidian-image-converter ⚡️ Convert, compress, resize, annotate, markup, draw, crop, rotate, flip, align images directly in Obsidian. Drag-resize, rename with variab…...

如何降低ai率?盘点3个降ai率神器与5个手改技巧,降aigc全流程解析!

最近我发现很多同学都在苦恼ai率这件事,后台发来的截图里,那报告,简直红得触目惊心。 现在的系统早已是next level,不是看你用了什么词,而是在分析你的文本生成逻辑。今天这篇文章,我不讲虚的,…...

Allegro PCB设计必备:3分钟搞定带钻孔数据的DXF文件导出(附常见错误排查)

Allegro PCB设计实战:高效导出带钻孔数据的DXF文件全攻略 在PCB设计领域,Allegro作为行业标杆工具,其文件输出质量直接关系到生产制造的准确性。特别是当设计需要与其他CAD系统协作或提交给PCB制造商时,DXF文件的完整性至关重要。…...

ARM Cortex-M嵌入式通用头文件sarmfsw深度解析

1. sarmfsw项目概述sarmfsw(ARM-based Common Headers)是一个面向ARM Cortex-M系列微控制器的轻量级、跨平台通用头文件集合。它并非传统意义上的功能库,而是一套经过工程验证的类型定义(typedefs)、宏(mac…...

CVE-2024-36401复现

一.漏洞概述 CVE-2024-36401 是 GeoServer 中的一个严重级远程代码执行漏洞(CVSS 9.8),允许未经身份验证的远程攻击者在服务器上执行任意代码。该漏洞源于 GeoServer 调用的 GeoTools 库 API 在评估 XPath 表达式时存在不安全处理&#xff0…...

TradingAgents-CN 多智能体金融分析系统:企业级容器化部署实战指南

TradingAgents-CN 多智能体金融分析系统:企业级容器化部署实战指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN TradingAgents-CN…...

Windows 10/11下用StyleGAN2-ADA-PyTorch训练自己的数据集(避坑Visual Studio编译错误)

Windows平台StyleGAN2-ADA-PyTorch环境配置全指南:从编译错误到自动化训练 在Windows 10/11上配置StyleGAN2-ADA-PyTorch环境时,许多开发者都会遇到Visual Studio编译工具链缺失的经典问题。不同于Linux系统的开箱即用,Windows环境需要额外处…...

AutoRaise:macOS窗口悬停管理的技术实现与配置指南

AutoRaise:macOS窗口悬停管理的技术实现与配置指南 【免费下载链接】AutoRaise AutoRaise (and focus) a window when hovering over it with the mouse 项目地址: https://gitcode.com/gh_mirrors/au/AutoRaise AutoRaise是一款基于Objective-C开发的macOS窗…...

CoPaw个人助理深度体验:多通道对话+定时执行,解放双手的实用工具

CoPaw个人助理深度体验:多通道对话定时执行,解放双手的实用工具 1. CoPaw简介与核心功能 CoPaw是一款基于Qwen3-4B-Instruct-2507模型的个人助理型产品,由AgentScope团队开发。它最大的特点是能够部署在用户自己的环境中,实现数…...