QGLWidget类

14 篇文章 1 订阅

https://blog.csdn.net/mahabharata_/article/details/52201422

这里,我们用一个简单的opengl程序来了解一下QGLWidget类的结构。程序绘制了一个白色的正方形:

1.  QGLWidget类的定义

 
  1. class Widget : public QGLWidget

  2. {

  3. Q_OBJECT

  4.  
  5. public:

  6. explicit Widget(QWidget *parent = 0);

  7. ~Widget();

  8.  
  9. protected:

  10. //重写的三个虚函数

  11. void initializeGL();

  12. void resizeGL(int w, int h);

  13. void paintGL();

  14.  
  15. private:

  16. Ui::Widget *ui;

  17. };

 

首先将类Widget的父类修改为QGLWidget。同时重写继承自QGLWidget的三个虚函数。

关于这三个虚函数,调用顺序及功能如下:

1. initializeGL()  ,在程序开始执行的时候最先被调用一次(当然构造函数是最先执行的,其次是initializeGL() )。用来完成相关的初始化工作,比如建立opengl绘图的上下文环境。

2. resizeGL(),在initializeGL()完成之后被调用一次(实际为多次,原因不明??),以及在窗口位置以及大小改变时被调用。用于完成建立opengl视图窗口等一系列工作。

3. paintGL(),绘制opengl图像。当窗口需要被刷新时会被调用(即用户使用updateGL()函数的时候,屏幕会被重绘),以及在resizeGL()完成之后,也会引起重绘。

程序开始>>构造函数>>initializeGL()>>resizeGL()>>paintGL() 

>>若用户调用updateGL()函数>>引起paintGL()函数的调用。

>>若窗口位置或者尺寸改变>>调用resizeGL()>>调用paintGL()

2.   构造函数

 

 
  1. Widget::Widget(QWidget *parent) :

  2. QGLWidget(parent), //调用父类QGLWidget()

  3. ui(new Ui::Widget)

  4. {

  5. ui->setupUi(this);

  6. }


 

 

3.  initiallizeGL()函数

 

 
  1. void Widget::initializeGL()

  2. {

  3. //设置widget的坐标和尺寸

  4. setGeometry(300, 150, 500, 500);

  5. //设置清除时颜色

  6. glClearColor(0.0, 0.0, 0.0, 0);

  7. }

 

4. resizeGL()函数

 

 
  1. void Widget::resizeGL(int w, int h)

  2. {

  3. //视口变换

  4. glViewport(0,0,(GLsizei)w,(GLsizei)h);

  5. //投影变换

  6. glMatrixMode(GL_PROJECTION);

  7. glLoadIdentity();

  8. gluPerspective(40.0,(GLdouble)w/(GLdouble)h,0.1,10000.0);

  9. //视图变换

  10. glMatrixMode(GL_MODELVIEW);

  11. glLoadIdentity();

  12. gluLookAt(0.0,0.0,10.0,0.0,0.0,0.0,0.0,1.0,0.0);

  13. }

 

5. paintGL()函数

 
  1. void Widget::paintGL()

  2. {

  3. //清屏

  4. glClear(GL_COLOR_BUFFER_BIT);

  5. //绘制矩形

  6. glColor3f(1.0,1.0,1.0);

  7. glRectd(2.0,2.0,0.0,0.0);

  8. }

6.  执行结果

                

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值