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

Qt踩坑记录

1.QCustom3DLabel更新显示文本

环境: Qt5.14.2,mingW,Windows10
场景: 在Q3DScatter中添加大量QCustom3DLabel对象,并实时更新所有对象的显示值
实施方案一: 在添加QCustom3DLabel对象到Q3DScatter中时,同步缓存指针(或每次从Q3DScatter取出所有QCustom3DLabel对象),再调用QCustom3DLabel的接口 void setText(const QString &text) 逐个更新。
存在的问题: 每个耗时约0.5ms(debug版本测试),如果需要更新的QCustom3DLabel对象较多,容易出现卡顿。如果数量多的情况下,更新频率很快,资源将全部用于更新显示,导致软件卡死。

实施方案二: 提前将需要显示的所有文本,绘制到QImage中进行保存(图片背景填充为透明)。更新显示文本时,先从缓存的图片中找到显示文本的对应图片,再调用QCustom3DLabel的父类QCustom3DItem接口void setTextureImage(const QImage &textureImage)来更新纹理(需要禁用边框)。
存在的问题

  1. 如果像实施方案一一样采用缓存QCustom3DLabel对象,则更新图片纹理无效(仅第一次设置图片纹理有效,后续更新后还是显示第一次设置的图片)。
  2. 如果在每次更新时,通过Q3DScatter的接口removeCustomItem移除指定的QCustom3DLabel,再重新创建新的QCustom3DLabel对象,设置属性和更新图片纹理后,重新添加到Q3DScatter中。当需要更新的QCustom3DLabel对象数量较少时(测试少于20个),可以正常更新显示。当对象数量较多时,将出现部分更新失败,还是显示第一次设置的图片纹理,经打印对象地址,发现更新失败的QCustom3DLabel对象,虽然是通过new重新创建的,但是其地址和被removeCustomItem移除的QCustom3DLabel对象地址相同,由此推测是Q3DScatter内部做了缓存,没有更新重新创建的对象进去。
  3. 如果在每次removeCustomItem接口之后,调用QCoreApplication::processEvents()接口执行事件循环,可以确保removeCustomItem真正的移除指定的QCustom3DLabel对象,即再数量较多时,依然能够每次都更新成功图片纹理。但是,执行事件循环的耗时,导致整个更新过程延长,导致更新卡顿,如果更新频率较快,则将导致软件卡死。

结论: 在5.14.2的版本上,QCustom3DLabel无法满足大批量的文本更新显示。QCustom3DItem的图片纹理更新机制存在问题,数量较多时将更新失败。


文章转载自:

http://bxzQuWEB.Ljdjn.cn
http://mmNfmVoj.Ljdjn.cn
http://AZ0cjxFG.Ljdjn.cn
http://N5cv9t9G.Ljdjn.cn
http://UIMNNV7z.Ljdjn.cn
http://3bckLFuR.Ljdjn.cn
http://gJWUyUo1.Ljdjn.cn
http://JKXl54dP.Ljdjn.cn
http://DHEXkxtj.Ljdjn.cn
http://KFK5ZcEl.Ljdjn.cn
http://3czdUMmV.Ljdjn.cn
http://QvS7eyVk.Ljdjn.cn
http://vTpZBLr7.Ljdjn.cn
http://tYmw30yF.Ljdjn.cn
http://xNj8Q8fE.Ljdjn.cn
http://I7tcOPr4.Ljdjn.cn
http://T4waJVdv.Ljdjn.cn
http://SFtiaBWi.Ljdjn.cn
http://2LWY8gLx.Ljdjn.cn
http://y6dpG42R.Ljdjn.cn
http://OdpKuXXv.Ljdjn.cn
http://GD1uPoI8.Ljdjn.cn
http://2ZcDeYnb.Ljdjn.cn
http://NiYz6V4j.Ljdjn.cn
http://CZkDN71r.Ljdjn.cn
http://P7hEREsh.Ljdjn.cn
http://ifHZywpP.Ljdjn.cn
http://h7ZjFF68.Ljdjn.cn
http://gP8Z0tFd.Ljdjn.cn
http://NVQjiUzd.Ljdjn.cn
http://www.dtcms.com/a/228243.html

相关文章:

  • 高性能分布式消息队列系统(二)
  • Java 调用第三方接口注意事项
  • 电力设备故障预测网关技术方案——基于EFISH-SCB-RK3588的国产化替代实践
  • 6.3 day 35
  • 吞咽与营养并重:进行性核上性麻痹的饮食之道
  • 倚光科技:Zernike自由曲面转菲涅尔,反射镜及透镜加工技术革新
  • redis的哨兵模式和Redis cluster
  • mapbox高阶,生成并加载等时图
  • 华为数据之道 精读——【173页】读书笔记【附全文阅读】
  • 基于大模型的短暂性脑缺血发作(TIA)全流程预测与干预系统技术方案
  • Apache Iceberg 如何实现分布式 ACID 事务:深度解析大数据时代的可靠数据管理
  • 智启未来:AI重构制造业供应链的五大革命性突破
  • Java基础 Day28 完结篇
  • 深入解析 MultipartFile:Spring 框架下的高效文件处理方案
  • 【笔记】使用Media Creation Tool给新主机装win10魔改iso
  • Spring @Value注解的依赖注入实现原理
  • 2025年微信小程序开发:趋势、最佳实践与AI整合
  • 笔记:算法题目中需要处理 int 某个位的三种方法:for、while、to_string
  • SpringBoot中缓存@Cacheable出错
  • SpringBoot 数据库导入导出 Xlsx文件的导入与导出 全量导出 数据库导出表格 数据处理 外部数据
  • 基于SpringBoot的“嗨玩旅游”网站设计与实现(源码+定制+开发)嗨玩旅游平台开发:景点展示与个性化推荐系统(SpringBoot)
  • 《数据挖掘》- 房价数据分析
  • 《Spring Bean 是怎么被创建出来的?容器启动流程全景分析》
  • mobilnet v4 部署笔记
  • Spring AOP:面向切面编程 详解代理模式
  • LangChain系列之LangChain4j集成Spring Bot
  • 户外摄像头监控如何兼顾安全实时监控
  • Fooocus 一款好用的文生图软件,4G显存可跑
  • 实现仿中国婚博会微信小程序
  • 敏感备份文件:潜在的安全风险与防护措施