2011-08-23 72 views
0

是否可以剪切QGLWidget?我的意思是我想削減它,所以我可以訪問下面的GUI。這聽起來很奇怪,但對於我來說,將我的QGLWidget分成兩部分將是很多工作。我希望你明白我的意思。謝謝切QGLWidget?

+0

不確定你要在這裏做什麼?你想達到什麼效果?也許你想要的是在Qt中表達不同。你有任何關於你的應用程序應該是什麼樣子的例子嗎? – blueskin

回答

5

我不完全明白你的意思是「cut」和下面的GUI。在正確使用佈局機制的Qt中,一個小部件會佔用它所覆蓋的區域,並且它下面沒有小部件。

是否要將多個視圖呈現爲單個QGLWidget?這很容易通過正確使用glViewport + glScissor


編輯因發表評論

有兩種窗口:

  • 頂級(您可以自由走動在屏幕上)
  • 子窗口(子窗口像頂級窗口中的小部件或窗格)

個窗口又進來兩個特點:

  • 邏輯子
  • 真正的孩子

一個合乎邏輯的子窗口只是由它的位置,尺寸和層,並通過工具包進行管理。從操作系統的角度來看,只有一個頂級窗口。該工具包是管理其內部狀態以在頂級窗口中給出獨立同級窗口的印象。

一個真實的子窗口由操作/圖形系統管理。這種真實的孩子窗口可以與他們的父母和兄弟姐妹分享他們的圖形上下文。但是,如果創建OpenGL上下文的窗口具有其自己的圖形上下文,則OpenGL只能正常工作。因此,任何OpenGL子窗口都不可避免地會擁有自己的圖形上下文和圖形系統窗口對象。大多數圖形系統都不支持在子窗口上應用形狀(只有頂層窗口,然後這也與OpenGL衝突)。

所以這一切都歸結爲它幾乎是不可能的,也不建議嘗試在兄弟的頂部「層」一個OpenGL窗口。它可能在某些情況下工作,但大多數情況下不會。

這是個壞消息。

好消息是,你只是看着一個稍微錯誤的方向。我在此指示你的觀點爲QGraphicsView。 QGraphicsView支持OpenGL作爲後端,你也可以編寫你自己的OpenGL渲染器代碼在QGraphicsView中執行。但是,另外QGraphicsView也可以用於渲染小部件,也使用OpenGL。所以你所要做的就是把你的OpenGL渲染代碼和你的小部件放到一個普通的QGraphicsView場景中並完成。這裏有一個教程http://www.crossplatform.ru/node/612本教程的結果如下所示:enter image description here

+0

這是難以解釋的。但我想在QWidget上放置一個QGLWidget。在Mac上不可能以相反的方式來做。現在我在QGLWidget中有兩個viewort。Gui應該應該被刪除。這是可能的,因爲我不知道如何將兩個視口放入兩個小部件。我的視口互動,作爲Qt的新手,我不知道如何實現這一點。所以,如果我能削減這部分的話,那將是不公平的。我在前面描述了我的問題:[link](http://stackoverflow.com/questions/7092106/defining-buttons-in-opengl-window)謝謝 – buddy

+0

@buddy:你試圖做的事情,那些誰試圖以庇護結束或郵寄或兩者兼而有之。請參閱我的編輯以獲取解釋。 – datenwolf

+0

嗯,好的。我認爲你的意思不是郵寄?或者這是一個新的表達。謝謝 – buddy