Ubuntu中在QT中配置OpenGL


之前搞實驗室項目,博客有些天沒有更新。現在學習需要,開始搞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.

    意思就是當所有窗口關閉時,程序就算是正常結束了~~

至此,第一課正常運行。具體的代碼解析,就不寫了,看教程吧。今天就到這里了。

   


免責聲明!

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



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