昨天无聊,开始配置ubuntu+opengl+qt的工作环境,安装过程比较顺利,初步熟悉了linux的基本东东。现在记录一下如何配置qt下面opengl开发。------------------------------------------------------------------------------------------------------------------------------------------------------------

  第一步:百度 qt+opengl然后出来一大堆文章,选择一个看似比较靠谱的打开。http://blog.csdn.net/l109383670/article/details/6791012。。。

然后新建一个项目wsc选择继承自QDialog其实这个无所谓,一会儿肯定是要改的。然后打开wsc。pro文件。这个文件基本可以理解成编译时候的配置文件。因为有很多要添加的库什么的都是在这里添加。然后我们添加两个东西。

QT              += qt3support                 //支持qt3支持

QT              += opengl                     //OPENGL库支持

OK,暂时没有报错。那么我们来做下一步。打开wsc。h文件。来添加我们需要引用的东西。这里是引用

#include <qgl.h>                              //要加入的库

#include <QtGui/qevent.h>                     //要加入的库

然后我们就会发现在添加qgl这个头文件的时候居然会报错。提示找不到这个东东。那么我们就来考虑怎么解决。在#include的时候我们发现有一个gl文件夹。很有可能这个东西就是opengl的东西。所以我们先添加#include<gl/gl.h>试试,看一会会不会出问题。然后把继承关系改成继承自public QGLWidget  ,这个类据说是qt中实现opengl的一个类,姑且试试。添加下面这写代码

Dialog( QWidget* parent = 0, const char* name = 0, bool fs = false );

  ~Dialog();

protected:

  void initializeGL();         //初始化窗口

  void paintGL();              //画窗口      

  void resizeGL( int width, int height );     //重置窗口

  void keyPressEvent( QKeyEvent *e );         //按钮事件

protected:

  bool fullscreen;                            //全屏事件

来声明一些函数和变量。

额,居然N多错误。明显不靠普。所以经过请教高手后的到了最后一条解决方`案,那就是。。。直接在qt中查找例子程序。hellogl然后观察别人的程序是怎么写的。

然后重新开始第一步。run 可以跑起来。好的,就研究他了。

万事开始难,所以我们还是从pro文件开始。靠。这么多代码。。。并且悲剧的是这么多不认识的代码。install后面的东西应该是安装信息,在各种平台下。直接过滤掉。看前面的。好代码,感觉就是不一样。看人家这小样写的。首先前两句应该都是指定路径的。接下来都是一些包含的文件。跳过,然后接下来有一句QT           += opengl。这句就是玩opengl的吧。添加库。。

然后就可以从main入手了。这里可以看到都是一些基本代码。其中规定了如果窗口在桌面上较小时就普通显示。如果较大的话全屏显示。报着不怕死的精神,我们在main文件中看到显示的是window所以,我们接下来要看window里面有些什么东西。在里面看到主要继承字QWidget这个用户界面的基类。然后里面还添加了一个键盘事件的监控。还有基本的构造析构函数,至于下面这写定义的变量。我们可以在window。cpp中察看。QSlider是个什么东西?这东西好像是个进度条。应该就是边上显示的那几个进度。好吧。我终于看明白了。俗话说。功夫不复有心人。主要是一个窗口对象,三个进度条对象。然后呢。将他们绑定,这样,他们就一荣俱荣,一损俱损。可以频率一样的一起工作了。

接下来的代码就是页面布局的代码。无非就是设置一些界面啊。设置一下初值啊。还有设置一下窗口标题。oh,soga。我们可以看下面的函数了。createSlider(),不错。创建进度条。下面添加键盘事件。按esc的时候退出。没问题。下一个文件。朝着glwidget进军。。。

 

哈哈哈哈,终于找到了#include <QGLWidget>,我看到了这个玩意。这个不就是传说中的那个QGLWindget,这个不就是那个终于等到的qt下面处理opengl的类么。跳过构造析构函数,我们看见下面有两个函数定义。 QSize minimumSizeHint() const;
    QSize sizeHint() const;什么东东,一会代码里面看。public slots:
    void setXRotation(int angle);
    void setYRotation(int angle);
    void setZRotation(int angle);

signals:
    void xRotationChanged(int angle);
    void yRotationChanged(int angle);
    void zRotationChanged(int angle);
//! [1]

//! [2]
protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
//! [2]

//! [3]
private:
    QtLogo *logo;
    int xRot;
    int yRot;
    int zRot;
    QPoint lastPos;
    QColor qtGreen;
    QColor qtPurple;
};这些东西的话,从字面意思就能看懂。哦。离解放还剩下最后的一步了。这种心情就像一个女子跟踪老公一个月,然后终于来到了他开房的宾馆,既隐隐约约的期待。又充满了害怕。好的,无论如何。我们还是要大开门看一下的,如果正常,我们欢天喜地。如果不正常。给他一耳光。。。

打开 glwidget。cpp。哦。万幸。不是特别复杂。构造函数初始化了一些变量,定义了两个颜色。继续跟踪。这里有个emit东西。英文意思是发射。哦。应该是发送消息了吧。看到这个了initializeGL()。这种激动就如同找到了人生的另外一半。现在死而无憾了。额,代码是看懂了,但是自己做的还是出问题。看来我有必要重新来一次。