2009-11-09 143 views
4

我在OpenGL中編寫程序,我需要某種接口工具欄。我最初的反應是使用GUI,然後進一步調查到C++,我意識到GUI的依賴於你正在使用的操作系統(我在Windows上)。因此,我決定使用QT來幫助我。OpenGL/C++/Qt - 需要建議

我的問題是,如果我正在採取最佳/適當的方法來解決這個問題。我甚至可以編寫我的OpenGL程序,並擁有我想用C++代碼創建接口的GUI,以完成我想要的操作。

例如,如果我在每個方向上創建一個帶有箭頭的簡單「控制面板」。在屏幕上,我有一個由glut創建的盒子對象,我可以連接箭頭來點擊並與openGL程序進行交互來移動盒子?

回答

7

使用Qt對於您的問題是一致的:它通過QtOpenGL模塊提供了良好的OpenGl集成。

  1. 派生從QGLWidget顯示器類(直到Qt的4.8)或QOpenGLWidget(因爲Qt的5.4),並實現虛擬方法paintGL()
  2. 您將有機會獲得Qt的信號和槽系統,這樣你就能夠捕捉Gui事件並更新OpenGl顯示。
+1

QtOpenGL模塊:http://doc.trolltech.com/4.5/qtopengl.html –

+1

對於Qt知之甚少,我得到了一個openGL窗口,其中有一個體面的粒子系統在大約2個小時內工作。它非常好。 –

-2

您可以在QGLWidget的頂部使用常規的非OpenGL Qt小部件,因此您所描述的內容是可行的。

我這樣做時遇到的一件事是,常規小部件必須是不透明的。當他們以任何方式透明的時候,他們身下都有各種垃圾。這是前一陣子,所以也許最新版本解決了這個問題。 YMMV也可能是平臺特定的。

+0

啊,我的匿名投票陰影已經回來了! – Troubadour

-1

住在GLUT。沒有必要爲控制面板添加Qt。你可以打開一個子窗口(或者第二個窗口,對你的程序設計來說效果更好),然後將控件繪製到該窗口中,並使用GLUT來處理鼠標交互。

此外,Qt和GLUT都有它們自己的事件循環。僅僅使用Qt的事件循環,你不得不放棄大部分的GLUT結構,因爲GLUT事件循環不會在那裏調用你的回調函數。 Qt確實具有讓其他人事件循環調用Qt的事件處理代碼的功能,但我認爲沒有簡單的方法可以讓GLUT切換事件信息。

+0

由於作者沒有說他已經在使用GLUT,因此您的評論不適用。 Qt明顯優於GLUT,並允許應用程序演變成一個完整的應用程序或一個可重用的小部件。 –

+0

Dat Chu,作者確實說他已經在使用GLUT。參見他的帖子的第三段和標籤。你說得對,Qt在大多數方面都優於GLUT,但混合Qt和GLUT是非常困難的。 –