|
在Qt5.4的Example中,有一個例子qopenglwidget,介紹了QOpenGLWidget和QPainter,但是在使用過程中,需要注意哪些方面呢?我在最初使用的時候就遇到兩者不能同時使用的問題,經(jīng)過一番折騰,終于解決了該問題。下面,我將需要注意的點(diǎn)記錄下來,以便查詢。 第一種方法,也就是直接QOpenGLWidget的paintGL函數(shù)中繪制兩者,其步驟為: void GLWidget::paintGL() { QPainter painter; //繪制3D內(nèi)容 ...... //注意:1、一定要釋放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等;2、如果開啟深度測試,一定要關(guān)閉。例如: m_program->release(); painter.endNativePainting(); //繪制2D內(nèi)容 ...... painter.end(); } 第二種方法,是在網(wǎng)上找的,其貼子地址http://blog.csdn.net/sdaujiaojiao/article/details/41898207,該貼主應(yīng)該無法使用第一種方法,所以,另辟蹊徑?,F(xiàn)將方法也列出來,便于杳找,如若想詳細(xì)了解,請到上面的網(wǎng)址。其步驟為:首先,重載兩個函數(shù)paintGL、paintEvent;然后,就是實(shí)現(xiàn),但是這種方法需要釋放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等,也不需要關(guān)閉深度測試。 void GLWidget::paintGL() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ...... } void GLWidget::paintEvent(QPaintEvent *e) { makeCurrent(); } 在第二種方法中,paintGL和paintEvent的調(diào)用是一一對應(yīng)的;起初,我還以為paintGL每次更新,會被調(diào)用兩次,經(jīng)過測試,其只被paintEvent函數(shù)調(diào)用一次。 兩種方法都有其優(yōu)點(diǎn),在根據(jù)需要選擇;第二種方法,比較適合擴(kuò)展,無需改動原因的代碼,只需要重載paintEvent,并在函數(shù)中調(diào)用paintGL,并繪制2D內(nèi)容即可。 |
|
|