Qt+VC2010+glew環境安裝配置


      Qt的源碼及預編譯安裝包在 Qt Archive下載,http://download.qt.io/archive/qt/, 目前最新的是Qt5,其中和Qt4不同的是,Qt5多了個QOpenGLWidget,而且自己包裝了一套OpenGL函數,有時候還是想用第三方而不是全部的Qt一籃子解決方案的。這里還是用Qt4.8.6的SDK,OpenGL使用glew這樣第三方圖形擴展庫,還能配置Qt+OSG,Qt+OGRE等很多C++庫。

Qt4.8.6 下載地址 http://download.qt.io/archive/qt/4.8/4.8.6/qt-opensource-windows-x86-vs2010-4.8.6.exe,可以看到200多M的SDK,相比現在Qt5的2~3G小很多了。

    安裝在D:\Qt或者自己創建的目錄,建議目錄不要帶中文。安裝完成以后再安裝Qt VS Addin 1.1.11 http://download.qt.io/archive/vsaddin/1.1.11/qt-vs-addin-1.1.11-opensource.exe

安裝路徑都是缺省安裝,安裝完成以后打開VS2010,看到菜單 ,說明安裝成功,這是一個方便在VC中用QT編寫C++程序的插件。

 

 

接着單擊Qt->Qt Options中單擊Add,設置QTDIR,名字取Qt4.8.6, 路徑填bin上一個路徑

填好以后設置Defalut Qt/Win version為Qt4.8.6

 

 

接下來創建一個Qt GUI Applicatioin,在 文件->新建->項目,可以看到已經有Qt4 projetcs模版了

 

 

選擇Qt Application后,天上qtglewtest0,下一步設置向導,在project setting那里記得OpenGL library

勾上

 

 然后finish,這個時候,項目樹是

 

項目樹上在qtglewtest0.ui上右鍵,打開方式

 

 

選擇Qt Designer,然后確定

 

 

彈出了Qt Designer編輯qtglewtest0.ui, 可以手動編輯ui,具體要參考<<C++ GUI Qt 4編程>>

 

 

編譯一下工程,主菜單 生成->生存解決方案,按綠色的三角箭頭,運行的exe如下,一個主框架窗口,包含一個菜單,一個centerWidget,一個狀態條

 

 

 下面來集成glew庫,opengl的API版本不斷在升級和增加,現在已經Opengl 4.5了,舊的顯卡驅動只能支持低版本的OpenGL,新的顯卡驅動能支持到OGL3,4及以上

怎么用新的OpenGL API,比如glDrawTransformFeedback是4.0以后才有的API,OpenGL有一個擴展機制,一個擴展是一個字符串,一種擴展表示有新特性的幾個API。我們使用的VS編譯器,windows已經提供了一個gl.h, 和opengl32.lib,glu32.lib, 還有opengl32.dll,這個在system32目錄中,還有一些wglXXX相關的API,在nehe的例子中,一般是win32 api直接寫的opengl程序,我們可以看到這些不是opengl的API屬於window專有的,用於創建管理OpenGL上下文的。gl.h中沒有的API通過查glGetString(GL_EXTENSIONS) 返回的字符串,然后通過wglGetProcAddress("glXXX")得到該glXXX的函數指針,具體有哪些擴展字符串,各個字符串屬於什么OpenGL版本,各個字符串對應的哪些新的gl函數,新特性的描述,這些都在opengl.org和khronos.org去查,一般在specifications文檔中詳細記錄。

總之很細節很麻煩了,所以有很多開源的opengl擴展庫,屏蔽了上面獲取擴展API的過程,glew就是一個普遍采用的OpenGL擴展庫,下面是步驟:

1.下載glew2.1.0 https://sourceforge.net/projects/glew/files/glew/2.1.0/glew-2.1.0-win32.zip/download

2.解壓放到d:\mclib\glew-2.1.0,  配置qtglewtest0工程屬性中的 

include目錄  添加 D:\mclib\glew-2.1.0\include

鏈接/常規/附加庫目錄 添加 D:\mclib\glew-2.1.0\lib\Release\Win32

鏈接/輸入 添加 

opengl32.lib
glu32.lib
glew32.lib

3. 下面是glwidget.h 和 glwidget.cpp 文件的源代碼

glwidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLWidget>

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();

protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
};

#endif

 

glwidget.cpp

#include <gl/glew.h> // glew must put first,and can not include QtOpenGL
#include <QtGui>
#include <math.h>
//#include <QtOpenGL>

#include "glwidget.h"

GLWidget::GLWidget(QWidget *parent)
    : QGLWidget(parent)
{
}

GLWidget::~GLWidget()
{

}

void GLWidget::initializeGL()
{
    GLenum isOK = glewInit();

    glClearColor(0.2f, 0.2f, 0.4f, 1.f); 
}

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}

void GLWidget::resizeGL(int width, int height)
{
    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    double halfW = width / 2.0;
    double halfH = height / 2.0;
    glOrtho(-halfW, halfW, -halfH, +halfH, 4.0, 100.0);

    glMatrixMode(GL_MODELVIEW);
}

void GLWidget::mousePressEvent(QMouseEvent *event)
{
}

void GLWidget::mouseReleaseEvent(QMouseEvent *event)
{
}

void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
}

將glwidget.h glwidget.cpp添加到qtglewtest0項目中,工程,右鍵 添加 現有項

 

 

選擇glwidget.h glwidget.cpp

 

4.添加完成后提升centerWidget,在Qt designer中操作,提升是把某個ui中的對象通過交互操作設置為新的類,這里centralWidget缺省是QWidget,我們要把它設置為上面的GLWidget

 

 

彈出的對話框

 

 在提升的類名稱中填GLWidget, 注意大小寫,然后添加,然后在列表中勾選,單擊提升

這樣,我們就看到了centralWidget類變為GLWidget

注意保存qtglewtest0.ui

 

 

5. 現在我們來生成,然后運行,可以看到下面的海藍色的OpenGL窗口,這種藍的rgb是0.2 0.2 0.4 也是OpenSceneGraph的缺省clearcolor顏色

 

 注:glwidget中主要的三個重寫的函數是

void initializeGL();
void resizeGL(int width, int height);

void paintGL();

initializeGL調用glewInit初始化,然后一些opengl API設置例如

清屏用的顏色,enable一些狀態,深度測試初始值等等

然后窗戶尺寸會變一次,這里設置glViewport, 視口設為和屏幕寬高一致,然后設置投影矩陣

 

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM