查看完整版本: [-- 初次试用QOpenGLWidget后出现的问题 --]

QTCN开发网 -> Qt基础编程 -> 初次试用QOpenGLWidget后出现的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

兵317 2016-07-06 17:27

初次试用QOpenGLWidget后出现的问题

如题,之前封装一个表盘类XMeter,继承自QLabel,里面用paintEvent画表盘,主要是通过贴图的方式来实现的,没有像之前利用一个QLabel来在上面画,而是直接在父窗口drawImage,利用QTransform来旋转坐标系实现指针转动,由于用的不是drawPixmap(如果用此接口函数,在开发板上运行到此处马上退出程序,不明所以,未解),所以每次刷新一次paintEvent所需的时间为270ms左右(开发板上,电脑上90ms左右),比较长,不能满足性能指标,后来直接将class XMeter : public QLabel变为class XMeter : public QOpenGLWidget,其他代码没变。因为QOpenGLWidget可以利用硬件加速,效率提高很快,电脑上运行后测试一次paintEvent的时间缩短为1-3ms,快是快了,但背景图片上的部分内容会消失不见,指针旋转过程中会出现残影,跳动,具体见图,初次贸然使用了QOpenGLWidget,就出现这么个情况,对QOpenGLWidget不了解,不知道还需要补充些什么内容才能将这些不该出现的问题缓解消除呢?[attachment=15446]上面红框内的好多白色短线是指针的残影,指针运行过程中原本是跟指针一般长,时间推移后就剩那么短,指针向右转动;下面红框表示的是原本背景图上的内容不见了,进度条上本来可以显示数字的,现在也不显示了。而且整个界面粗糙了很多,没用QOpenGLWidget之前的是这样的,[attachment=15447][attachment=15448]

兵317 2016-07-06 17:52
[attachment=15449]仔细看放置图片的区域会显示黑色,不像正常时候能显示背景上的内容

兵317 2016-07-06 18:03
也即放置图片的那块区域的背景内容都没了,希望大家能说说

兵317 2016-07-29 14:00
公布答案吧,参考http://blog.qt.io/blog/2014/11/20/qt-weekly-20-completing-the-offering-qopenglwindow-and-qrasterwindow/?utm_source=tuicool ,不直接paintEvent,即可解决。

hehui 2016-08-23 08:16
不是说paintEvent跟paintGl是等价的么?

兵317 2016-09-18 15:58
hehui:不是说paintEvent跟paintGl是等价的么? (2016-08-23 08:16) 

大部分是等价的,但以我目前这种糙水平的理解,paintGL可以调用硬件的GPU,提供硬件加速,paintEvent则单纯的软件工作了。

q695691097 2017-01-18 22:11
请问表盘里面的跟随指针的蓝色效果是怎么实现的?


查看完整版本: [-- 初次试用QOpenGLWidget后出现的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled