之前搞實驗室項目,博客有些天沒有更新。現在學習需要,開始搞OpenGL+Ubuntu+QT。
搞了整整一天,由於是首次使用ubuntu,所以這ubuntu下配置qt和Opengl環境時走了很多的彎路,現在終於配好了我想要的環境,記錄下今天的彎路過程:
- 這ubuntu中(我的版本是13.4)首先這qt官網下載了qt的安裝包。這個安裝過程還是很簡單的。
- 出現問題的是接下來的OpenGL的配置過程。
- 首先,我按照教程http://www.qiliang.net/old/nehe_qt/index.html中的准備方法去配置的。也就是要裝一個Mesa,然后接下來就是Mesa安裝教程(http://blog.csdn.net/wm111/article/details/7661506 、http://www.cnblogs.com/leon032/archive/2012/07/18/2597860.html )中出現的各種安裝失敗的error。不是缺這個,就是缺那個,問題是有的缺的,軟件中心還找不到。這個過程,整整花了一個中午和下午的時間。后來,實在是解決不了了,果斷查詢有沒有其他方法。
-
使用教程:在Ubuntu下如何開發配置OpenGL環境? 安裝環境成功。主要步驟(Ctrl+Alt+T打開終端,使用以下命令):
- sudo apt-get install build-essential
- sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
- sudo apt-get install mesa-common-dev freeglut3-dev
- sudo apt-cache search glew
- 將搜索到的帶有"glew"的都安裝一遍,下面xx即為對應的程序名
- sudo apt-get install xxx
- 至此,其實已經可以用了,上面的freegult那個是Opengl的一個開源庫。這篇教程里還附有段代碼用來檢測是否安裝Opengl成功的。使用g++來測試,是可以成功運行的(QT不行)。
- 另外,uBuntu上面的g++要自己進行安裝,安裝命令:sudo apt-get install g++
- 那么,接下來我開始學習教程:http://www.qiliang.net/old/nehe_qt/index.html 的第一課(本課程的源代碼)。並說明我所遇到的問題。
- 首先,使用QT打開代碼,開始構建,出現錯誤如下:
|
- 查找原因,在lesson01.pro配置文件中少了一句:"QT += opengl widgets"再次構建,問題解決。但出現下面問題:
|
- 首先看第一個。意思是沒有匹配的函數,原代碼如下:
|
- 由於NeHeWidget函數繼承自QGLWidget,所以我去查了下QGLWidegt文檔,結果如下:
|
- 很明顯,第二個參數的類型錯誤。將原來的char 改正為:QGLWidget后,同時還要在NeHeWidget類定義里將對應的構造函數也進行更改(如下圖所示,已改正)。再次構建,這個問題已經消除。
|
- 第二個問題:函數"setCaption"未定義,查找資料得知,由於這QT4以后都沒有了這個函數,而是使用setWindowTitle代替。所以這里將其改正。構建,成功。
-
第三個問題:函數"gluPerspective"從其glu開頭可看出是Opengl函數,這里顯示未定義,所以應該是未找到。查找資料得知:
- 首先確定有沒有按上面安裝freeglut3-dev
- 如果沒有,最好再來一次:sudo apt-get install freeglut3-dev
- 在pro文件中添加:LIBS += -lglut -lGLU
- 這使用到這個函數的地方加上頭文件:#include<GL/glu.h>
- 再次構建,問題解決。
- 第四、五個問題,從字面意思上,很容易看出,沒有識別出類:QKeyEvent,想到是否是沒有包含進來,查看果然沒有,添加頭文件:#include<QKeyEvent> 。再次構建,問題解決。但出現下面新的問題:
|
-
main函數中的QApplication的對象a沒有"setMainWidget"方法,百度,從QT4以上就沒有setMainWidget這個函數,額,這個還真沒找到替換方法,希望有人知道也可以告訴我一聲。我第一次用QT~~~~所以將這一句進行了注釋。因為qt4以上沒有這個函數了:
Porting to Qt 4:
QApplication::setMainWidget() is no longer used. When all an application's windows are closed, the application will exit normally.
意思就是當所有窗口關閉時,程序就算是正常結束了~~
至此,第一課正常運行。具體的代碼解析,就不寫了,看教程吧。今天就到這里了。