在initializeGL() resizeGL() paintGL() 三个函数里面,放上qDebug()函数作为调用标记。

程序开始运行时,立刻产生的输出

inside initializeGL
inside resizeGL
inside resizeGL
inside resizeGL
inside paintGL
inside paintGL
inside paintGL

可以知道 openGL在Qt中如果工作的
initializeGL函数由于是初始化,所以只调用一次
而resizeGL和paintGL会多次调用

1:resizeGL在开始时调用了3次

2:paintGL在开始时也调用了3次

3:resizeGL在正常的情况下,触发的条件是,窗口大小发生变化时,resizeGL被调用,之后会触发paint事件,从而调用paintGL()事件处理器。

下面是改变窗口大小后,qDebug()产生的输出

inside resizeGL
inside paintGL
inside paintGL

4:paintGL在正常的情况下,只要你移动窗口的位置,就会马上触发paint事件,从而调用paintGL事件处理器

当然,还有窗口在隐藏和显示之间变换时,也会触发paint事件,从而调用paintGL事件处理器。

下面是移动和显隐窗口时,qDebug()产生的输出 ​

inside paintGL
inside paintGL
inside paintGL
inside paintGL
inside paintGL

总结

1:initializeGL()函数只在程序开始时运行一次,之后不会再运行

2:resizeGL()只在在窗口尺寸发生变化时,会自动运行,然后触发paint事件,从而调用paintGL()事件处理函数

3:paintGL()会在窗口位置移动时被调用,或是窗口在隐藏和显示之间变换时,被调用

关于updateGL()函数 会触发什么

我们在updateGL()函数上下,包围上调试信息

           db("before upateGL");
           updateGL();
           db("after updateGL")

下面是得到的结果

before upateGL
inside paintGL
after updateGL

可知updateGL()函数的功能就是触发paint事件,从而调用paintGL()函数


猫哥
304 声望44 粉丝

热衷于研究各类互联网技术,热爱学习,热爱生活!


引用和评论

0 条评论