如何将opengl渲染到qt窗口
1个回答
展开全部
在 Qt5 中,新增了 QOpenGL* 类,用以取代之前的 QGL* 类。
注意,虽然我们仍然能通过 Qt5 中的 OpenGL 模块使用 QGL* 类,但强烈建议大家在新的 Qt 应用程序中使用 QOpenGL* 类而不是 QGL* 类。
2
另外,在 Qt5 中,已经将 OpenGL 集成到了 Gui 模块中。因此,我们要想使用与 OpenGL 相关的类和函数,只需要在 .pro 工程文件中包含 gui 模块就可以了,无需像以前一样还要包含 opengl 。
END
二、怎样在Qt5中使用OpenGL
下面,我们来通过一个实际例子来演示怎样在 Qt5 中使用 OpenGL。在这个例子中,为了便于大家理解,我们只创建一个简单的背景为黑色的 OpenGL 窗口。下面是程序的运行效果图。
首先,我们需要创建一个自定义的窗口类 Window。该类的父类有两个:
1)QOpenGLWindow:以公有方式继承
2)QOpenGLFunctions:以保护方式继承
另外,在通常情况下,我们还需要实现三个从父类继承的虚函数:
1)void initializeGL()
2)void resizeGL(int width, int height) //若无需对高、宽进行处理,此函数可省
3)void paintGL()
然后,我们来实现上面所声明的函数。
1) initializeGL
该函数用来初始化当前的 OpenGL 环境。
注意,在此函数中,我们必须调用 initializeOpenGLFunctions(); 语句以便 Qt 在后台完成 OpenGL 环境的初始化工作。
随后,使用 glClearColor 函数来设置清除颜色。该函数的前三个参数分别是红、绿、蓝的分量值,第四个参数为透明度值。
2)resizeGL
该函数主要用来对高度和宽度进行一些变化处理。当然,如果你没有什么特殊需求,也可以不处理这个函数。
3)paintGL
该函数才是重头戏,绘制一般在此函数内进行。在这里,作为示范,我们只是简单地用之前设置的清除颜色来清除窗口背景。
最后,我们添加一个 main.cpp 文件,在主函数中新建一个 Window 类对象,然后将其显示出来。啊哈,纵观整个过程,相比之前的 Qt 版本,在 Qt5 中使用 OpenGL 是不是超级简单呢?
注意,虽然我们仍然能通过 Qt5 中的 OpenGL 模块使用 QGL* 类,但强烈建议大家在新的 Qt 应用程序中使用 QOpenGL* 类而不是 QGL* 类。
2
另外,在 Qt5 中,已经将 OpenGL 集成到了 Gui 模块中。因此,我们要想使用与 OpenGL 相关的类和函数,只需要在 .pro 工程文件中包含 gui 模块就可以了,无需像以前一样还要包含 opengl 。
END
二、怎样在Qt5中使用OpenGL
下面,我们来通过一个实际例子来演示怎样在 Qt5 中使用 OpenGL。在这个例子中,为了便于大家理解,我们只创建一个简单的背景为黑色的 OpenGL 窗口。下面是程序的运行效果图。
首先,我们需要创建一个自定义的窗口类 Window。该类的父类有两个:
1)QOpenGLWindow:以公有方式继承
2)QOpenGLFunctions:以保护方式继承
另外,在通常情况下,我们还需要实现三个从父类继承的虚函数:
1)void initializeGL()
2)void resizeGL(int width, int height) //若无需对高、宽进行处理,此函数可省
3)void paintGL()
然后,我们来实现上面所声明的函数。
1) initializeGL
该函数用来初始化当前的 OpenGL 环境。
注意,在此函数中,我们必须调用 initializeOpenGLFunctions(); 语句以便 Qt 在后台完成 OpenGL 环境的初始化工作。
随后,使用 glClearColor 函数来设置清除颜色。该函数的前三个参数分别是红、绿、蓝的分量值,第四个参数为透明度值。
2)resizeGL
该函数主要用来对高度和宽度进行一些变化处理。当然,如果你没有什么特殊需求,也可以不处理这个函数。
3)paintGL
该函数才是重头戏,绘制一般在此函数内进行。在这里,作为示范,我们只是简单地用之前设置的清除颜色来清除窗口背景。
最后,我们添加一个 main.cpp 文件,在主函数中新建一个 Window 类对象,然后将其显示出来。啊哈,纵观整个过程,相比之前的 Qt 版本,在 Qt5 中使用 OpenGL 是不是超级简单呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询