2011-04-09 194 views
5

我想開發一個類似於Pure Data的應用程序(使用C++),但使用酷酷的GUI和更好的文檔...是的,類似於Max/MSPReaktor,但是自由和開放!OpenGL中的GUI工具包

爲了創建一個吸引人的,被動的和可移植的界面,我想使用OpenGL。 在我看來,有像Blender GUI這樣的東西。

開始發展我的自定義GUI工具包我爲了用Google搜索周圍,如果存在的東西,我可以用它來了解之前,我發現:

  • Juce:它似乎很支持,但我沒有了解是否只能在界面中嵌入OpenGL畫布,或者可以使用OpenGL渲染所有的小部件。
  • nUI:它看起來很酷很便攜,但是......它的論壇是沙漠,而且很難找到教程!
  • ceGUI,FLTK,GLUI:如此平坦和灰色;-),並且還沒有保留。

你知道其他工具包嗎?正如你所理解的,我正在尋找一個可移植的庫(用C++),快速和支持。

另一種可能性是從頭開始使用我的自定義工具包使用SDL或Freeglut,在這種情況下這可能是最好的解決方案?

P.S .: 閱讀有關此主題的其他線程我注意到,許多開發人員建議使用Qt ... Qt可以依靠OpenGL進行渲染嗎?或者它可能只有主機OpenGL畫布?反正你認爲是可能的(具有良好的性能)創造了Qt的是這樣的:

+0

nUI的github存儲庫中有一些教程(請參閱Wiki選項卡)。 – ergosys 2011-04-09 17:13:36

+0

@ergosys你是對的,但你可以在這裏閱讀[nUI Wiki](https://github.com/libnui/nui3/wiki):<<這個wiki目前正在從原始網站的備份中恢復它是不完整的,許多功能被破壞(沒有圖像,缺少鏈接等)。在我們解決問題時請耐心解決...... >>。無論如何,謝謝...我想我會試試看! – 2011-04-09 19:10:01

+0

Ross Bencina的Audiomulch程序可以滿足您在界面上描述的某些內容(儘管音樂/音頻環境比您提出的要高,但它使用Qt。你可能想和他聯繫。 – daj 2013-02-25 17:54:36

回答

1

是不是真的有一個很好的OpenGL工具包,他們傾向於爲特定的應用程序而發明,然後被拋棄。

是的Qt與openGL很好地工作,有一個openGL QGlWidget與全硬件加速(和可選鏈接到openCL)。您可以在Qt應用程序中擁有儘可能多的QGLwidgets,每個應用程序中都有自己的openGL命令。

您也可以在同一個QGLWidget來繪圖(http://doc.qt.nokia.com/qq/qq26-openglcanvas.html)混合的Qt和OpenGL

稍微偏離主題:您還可以選擇Qt來所有渲染都使用openGL - 這仍然有點實驗性,但意味着在某些嵌入式平臺(如手機)上2d Qt可以更快。
編輯:澄清 - 整個應用程序仍然是正常的Qt,但用openGL命令「引擎蓋下」繪製

+1

感謝Martin的回答...所以如果我理解正確,那麼使用OpenGL來繪製小部件圖形是可能的(作爲實驗方式)。這可能是很好的......或者無論如何可能會嵌入許多OpenGL小部件,其中包含自定義和加速繪圖邏輯。 – 2011-04-09 17:59:46

1
+0

我在Clutter寫了一個「現場」停止動作編輯Toonloop。我對Clutter的主要關注點是他們傾向於棄用他們的API,或者至少他們過去做過很多。我想,如果我將來會編寫一個新版本的Toonloop,我將用QML和QtQuick推進Qt5。 – 2017-01-31 19:10:37

1

的Qt 5。7以上版本提供QML中的QtQuick Controls 2.0,這些都是在OpenGL中實現的。

http://doc.qt.io/qt-5/qtquickcontrols2-index.html

他們的API是很穩定,在Android,iOS設備,Mac系統中,Windows,GNU/Linux等工作

這裏是一個小的hello world約QML一個偉大的書。 https://qmlbook.github.io/en/ch02/index.html#hello-world

您在QML中編寫JavaScript,並且QMake構建系統將其轉換爲C++對象代碼。

import QtQuick 2.5 

Rectangle { 
    width: 360 
    height: 360 
    Text { 
     anchors.centerIn: parent 
     text: "Hello World" 
    } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      Qt.quit(); 
     } 
    } 
} 
+0

不知道爲什麼這是downvoted。 Qt Quick 2可能是最好的選擇之一。 – 2017-01-30 20:47:56

+0

這僅僅是因爲我在23小時前發佈了這個答案。請投票! – 2017-01-31 19:08:14