QGLWidget类
来源:互联网 发布:mysql scope identity 编辑:程序博客网 时间:2024/06/10 08:02
这里,我们用一个简单的opengl程序来了解一下QGLWidget类的结构。程序绘制了一个白色的正方形:
1. QGLWidget类的定义
class Widget : public QGLWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();protected: //重写的三个虚函数 void initializeGL(); void resizeGL(int w, int h); void paintGL(); private: Ui::Widget *ui;};
首先将类Widget的父类修改为QGLWidget。同时重写继承自QGLWidget的三个虚函数。
关于这三个虚函数,调用顺序及功能如下:
1. initializeGL() ,在程序开始执行的时候最先被调用一次(当然构造函数是最先执行的,其次是initializeGL() )。用来完成相关的初始化工作,比如建立opengl绘图的上下文环境。
2. resizeGL(),在initializeGL()完成之后被调用一次(实际为多次,原因不明??),以及在窗口位置以及大小改变时被调用。用于完成建立opengl视图窗口等一系列工作。
3. paintGL(),绘制opengl图像。当窗口需要被刷新时会被调用(即用户使用updateGL()函数的时候,屏幕会被重绘),以及在resizeGL()完成之后,也会引起重绘。
程序开始>>构造函数>>initializeGL()>>resizeGL()>>paintGL()
>>若用户调用updateGL()函数>>引起paintGL()函数的调用。
>>若窗口位置或者尺寸改变>>调用resizeGL()>>调用paintGL()
2. 构造函数
Widget::Widget(QWidget *parent) : QGLWidget(parent), //调用父类QGLWidget() ui(new Ui::Widget){ ui->setupUi(this);}
3. initiallizeGL()函数
void Widget::initializeGL(){ //设置widget的坐标和尺寸 setGeometry(300, 150, 500, 500); //设置清除时颜色 glClearColor(0.0, 0.0, 0.0, 0);}
4. resizeGL()函数
void Widget::resizeGL(int w, int h){ //视口变换 glViewport(0,0,(GLsizei)w,(GLsizei)h); //投影变换 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0,(GLdouble)w/(GLdouble)h,0.1,10000.0); //视图变换 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0,0.0,10.0,0.0,0.0,0.0,0.0,1.0,0.0);}
5. paintGL()函数
void Widget::paintGL(){ //清屏 glClear(GL_COLOR_BUFFER_BIT); //绘制矩形 glColor3f(1.0,1.0,1.0); glRectd(2.0,2.0,0.0,0.0);}
6. 执行结果
0 0
- QGLWidget类
- QGLWidget类
- QGLWidget类
- QGLWidget类函数说明及图形保存
- QGLWidget类用来绘制OpenGL图形的窗口
- QGLWidget的更新机制
- QT 2D图形硬件加速(QGLWidget QPainter)
- QT5:QPainter+QGLWidget VS QML+SceneGraph performance
- QGLWidget不同窗口中的共享纹理
- QT5 TUTORIAL OPENGL WITH QGLWIDGET - 2016
- 解决问题:QGLWidget:No such file or directory
- 在QT设计界面中加入QGLWidget
- 怎样解决头文件中找不到QGLWidget
- Qt QGLWidget 不能够实时刷新的问题
- OSG嵌入Qt的第二种方式:使用QOpenGLWidget/QGLWidget
- Qt5.5无法正常运行QGLWidget的解决办法
- Qt中 QGLWidget碰到no such file or directory的解决办法
- Qt中 QGLWidget碰到no such file or directory的解决办法
- SDUTACM 数据结构实验之排序一:一趟快排
- 【HDU5823】color II(状压DP)
- 最长回文子串
- 本地运行hadoop-Failed to locate the winutils binary in the hadoop binary path
- LeetCode | Subsets I,II
- QGLWidget类
- chromium 安装flash-plugins 解决方案
- Java的反射机制
- C++学习笔记(一)
- Codevs 1035 火车停留 [费用流] [拆点]
- Android view背景动态改变带简单淡入淡出动画
- poj3260&&hdu3591 多重背包+完全背包
- 1023. Have Fun with Numbers (20)
- 动态库的编写和使用