第一步肯定是先建立一个qt项目。建立一个空的其他项目gltest。然后在gltest。pro文件中加入对opengl的支持

QT +=opengl;

第二部就开始建立自己的头文件,也叫GLWidget.h吧。

我参考的是这篇文章。所以代码就先不往过贴了。

把代码贴进去,oh,幸亏还有错误。不然这篇文章就写不下去了。我们可以把这篇文章的性质变成错误排除。

那么先看第一个错误。D:\test\qttest-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2008__Qt_SDK____\..\qttest\glwidget.cpp:102: 错误:C3861: “gluPerspective”: 找不到标识符

这个一看以glu开头的标识符找不到了。这是qt4.8以后qgl中不包括glu的库导致的。所以我们导入glu库。在开始添加

#include<QtOpenGL/GLU.H>
好的。解决掉了所有找不到标识符的问题。接下来在看下面的问题。
  

D:\test\qttest-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2008__Qt_SDK____\..\qttest\glwidget.cpp:184: 错误:C2057: 应输入常量表达式这个错误应该是作者的错误。这句话有问题。
照着自己的意思改改看看。额。出错了。好吧。我们还是先搞明白这个程序到底是干什么的吧。

靠,一句注释都没有加。。写代码不加注释是一个坏习惯。我以后一定要加注释。。
我们从构造函数开始看起。构造函数里面定义了一些变量。看意思应该是三个旋转的一个缩放的。继续往下跳。下面该看什么呢。。qwidget里面默认的会先调用initializeGL函数,所以我们从这看。这个函数一般会完成一些opengl的初始化工作。这里面清楚颜色缓存,启用深度测试,启用平滑模式等等。。这些都是初始化设置。然后定义了一个sizes【2】。step应该是步长的意思。而下面又出现了一个glgetfloatv这个函数以前没见过。查查。百度之后发现这个函数是像系统查询一个当前的状态变量。根据字面意思我们推断。第一个查询的应该是栅格的高度间距。第二个应该是宽度间距。接下里啊就是resizeGL。这个函数在窗口首次被显示的时候会调用一次。并且在窗口大小位置被改变的时候也会被调用。这里无非也就是设置了一下映射方法,略过。下面看paintGL这个函数。这个函数在窗口每次绘制的时候被调用。所以我们仔细观察一下这个函数。oh mygod。看着这么少的代码。原来重头戏在这 。drawcone,所有的绘图东西都在这个函数里面了。
所以我们直接drawcone;这里就是代码出错的地方。所以我们看的认真点。这里定义数组出错了。并且把steps换成一个数字就会没错。难道变量不能用来定义数组。我们可以做个实验试试。看来变量是不能直接来定义数组的。对。所以我们修改代码改成
GLfloat**vertices;
vertices=newGLfloat*[steps];
for(intstep=0;step<steps;step++)
vertices[step]=newGLfloat[3];


这样就没问题了。不过接下来程序还不能运行。为什么呢。因为还没有main函数。我们加上main函数。
#include<QtGui/QApplication>
#include"glwidget.h"
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
GLWidgetgl;
gl.show();
returna.exec();
}
ok程序可以运行。挺漂亮的哈。