• 3319阅读
  • 1回复

[讨论]Android平台QGLWidget的子控件会有重影 [复制链接]

上一主题 下一主题
离线zone666666
 

只看楼主 倒序阅读 楼主  发表于: 2017-10-30

我用用Qt Creator for android写了一个指北针控件类MapCompass,

在该控件的paintEvent中绘制“十”字表示标准方向,周围根据偏移角度offsetAngle值,绘制白色环形刻度,以及红色正北指针,类似苹果手机的指南针界面

该控件设置背景为透明setAttribute(Qt::WA_TranslucentBackground,true);

使用osgEarth加载地图,最终显示地图的控件是osg提供的GLWidget类,继承自QGLWidget。

在地图上添加指北针控件,并使用定时器测试指北针在地图上转动是否正常时,发现:在安卓平板上指北针界面的底部出现了残影,也就是说每次重绘之后好像并没有清空上一次重绘的内容,上次绘制残留的影像仍留在底部的GLWidget上。而且如果在界面上添加任何控件,并对控件进行hide,控件是可以被hide掉的,但是控件的影像依然留在GLWidget上。后来我去掉了地图控件,直接用一个空的QGLWidget来代替,依然存在这样的问题

随后我又试了一下,在MainWindow上加指北针,如果我把MainWindow设为透明,也会出现这种情况,于是我看了一下QGLWidget的源码,发现在构造函数里设置了setAttribute(Qt::WA_PaintOnScreen);也就是说QGLWidget绘制图像是直接绘制在屏幕上的,这和MainWindow透明时发生的错误如出一辙。也就是说在安卓平板上如果直接在屏幕上绘图就会出现残影的现象,不知道有什么好的解决方法?

离线zone666666

只看该作者 1楼 发表于: 2017-10-31
快速回复
限100 字节
 
上一个 下一个