近期在疯狂测试地图组件,在不断的放大和缩小地图过程中,一开始发现会有白色背景闪烁,尽管是一闪而过,总体感觉还是不大好,最后发现是在重新刷新
界面的时候,有一次是空白透明的背景图,也触发了一次绘制,将这个绘制关闭就好,这个现象在加载本地
文件的时候非常明显。关闭之后白色背景是
没有了,又出来新的
问题,发现缩放滑块会有个白色背景,通过打印
调试发现,父类的painter触发了子类的painter导致的,而这个缩放滑块在默认绘制的时候,会以
系统的背景
颜色绘制,然后才是自身的绘制,本来控件是透明背景的,之前由于这个背景和闪烁的背景颜色一致,所以看不清,现在把瓦片地图的白色背景去掉以后,就很明显了。
着手解决这个问题,用了浑身解数,包括设置setAttribute(Qt::WA_OpaquePaintEvent)或者setAttribute(Qt::WA_NoSystemBackground)等,测试了十几种方法,依然无效,这个该死的白色背景还是会在一瞬间
显示,也就在缩放级别变化的时候触发,后面想起来有一个setUpdatesEnabled属性可以临时禁用控件绘制,于是在缩放变化前,主动设置m_zoom_control_slider.setUpdatesEnabled(false),然后等到整张瓦片地图绘制完成的时候,再m_zoom_control_slider.setUpdatesEnabled(true)就可以了,核心原理就是在中途绘制期间禁止这个缩放滑块的绘制。但是又不能一直禁用,因为还有缩放级别要显示在滑块上,所以要在合适的时机重新启用绘制。
