• 24阅读
  • 0回复

记一个优化改良的实施过程/纯QPainter实现的地图组件/支持天地图谷歌地图等 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 正序阅读 楼主  发表于: 昨天 09:19

近期在疯狂测试地图组件,在不断的放大和缩小地图过程中,一开始发现会有白色背景闪烁,尽管是一闪而过,总体感觉还是不大好,最后发现是在重新刷新界面的时候,有一次是空白透明的背景图,也触发了一次绘制,将这个绘制关闭就好,这个现象在加载本地文件的时候非常明显。关闭之后白色背景是没有了,又出来新的问题,发现缩放滑块会有个白色背景,通过打印调试发现,父类的painter触发了子类的painter导致的,而这个缩放滑块在默认绘制的时候,会以系统的背景颜色绘制,然后才是自身的绘制,本来控件是透明背景的,之前由于这个背景和闪烁的背景颜色一致,所以看不清,现在把瓦片地图的白色背景去掉以后,就很明显了。

着手解决这个问题,用了浑身解数,包括设置setAttribute(Qt::WA_OpaquePaintEvent)或者setAttribute(Qt::WA_NoSystemBackground)等,测试了十几种方法,依然无效,这个该死的白色背景还是会在一瞬间显示,也就在缩放级别变化的时候触发,后面想起来有一个setUpdatesEnabled属性可以临时禁用控件绘制,于是在缩放变化前,主动设置m_zoom_control_slider.setUpdatesEnabled(false),然后等到整张瓦片地图绘制完成的时候,再m_zoom_control_slider.setUpdatesEnabled(true)就可以了,核心原理就是在中途绘制期间禁止这个缩放滑块的绘制。但是又不能一直禁用,因为还有缩放级别要显示在滑块上,所以要在合适的时机重新启用绘制。

欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个