Qt+OpenGL 计算机图形学中遇到的一些坑(Qt更新或重绘不成功)
·
Qt Widget在更新或者重绘时居然。。。
在使用update()或者是repaint()的时候,有时候会想到在一个函数内多次的去更新QOpenGLWidget
但是,update()的调用是在整个结束之后的调用,应该是相当于将函数和调用这个函数的函数等等做完之后update()才会调用paintGL()去重新画图。
而repaint()理应是要立即重绘的,但是,当你尝试执行多次时,如:
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
std::cout<<"OK"<<std::endl;
在我的机器上这个只是运行了一次的paintGL()(在paintGL()中加入了输出观察到的),而且,这一个"OK"的输出也是在其之前的。。。就很怪。。。
之后,尝试了加上Sleep()去尝试:
ui.openGLWidget->repaint();
Sleep(1000);
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
ui.openGLWidget->repaint();
std::cout<<"OK"<<std::endl;
发现调用了两次的paintGL()函数,而"OK"夹在了其之间,最后再加上了一些测试,发现第一此的repaint()压根没用。。。输出的两次都是后面的,所以,最后的方式是:
for(int a=0;a<3;++a)
{
Sleep(17);//在我的机器上测试得到最小的睡眠时间为17ms
ui.openGLWidget->repaint();
}
std::cout<<"OK"<<std::endl;
这样输出就是正常的了
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)