日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在Qt5.4中如何實(shí)現(xiàn)QOpenGLWidget和QPainter混合編程

 勤奮不止 2019-06-25

在Qt5.4的Example中,有一個(gè)例子qopenglwidget,介紹了QOpenGLWidget和QPainter,但是在使用過(guò)程中,需要注意哪些方面呢?我在最初使用的時(shí)候就遇到兩者不能同時(shí)使用的問(wèn)題,經(jīng)過(guò)一番折騰,終于解決了該問(wèn)題。下面,我將需要注意的點(diǎn)記錄下來(lái),以便查詢。

第一種方法,也就是直接QOpenGLWidget的paintGL函數(shù)中繪制兩者,其步驟為:

void GLWidget::paintGL() {

QPainter painter;
    painter.begin(this);
painter.beginNativePainting();

//繪制3D內(nèi)容

......

//注意:1、一定要釋放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等;2、如果開(kāi)啟深度測(cè)試,一定要關(guān)閉。例如:

m_program->release();
    m_vao.release();
    m_logoVbo.release();
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_CULL_FACE);

painter.endNativePainting();

//繪制2D內(nèi)容

......

painter.end();

}

第二種方法,是在網(wǎng)上找的,其貼子地址http://blog.csdn.net/sdaujiaojiao/article/details/41898207,該貼主應(yīng)該無(wú)法使用第一種方法,所以,另辟蹊徑?,F(xiàn)將方法也列出來(lái),便于杳找,如若想詳細(xì)了解,請(qǐng)到上面的網(wǎng)址。其步驟為:首先,重載兩個(gè)函數(shù)paintGL、paintEvent;然后,就是實(shí)現(xiàn),但是這種方法需要釋放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等,也不需要關(guān)閉深度測(cè)試。

void GLWidget::paintGL()
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

......

}

void GLWidget::paintEvent(QPaintEvent *e) 

{

makeCurrent();
    paintGL();
    QPainter pter(this);
    pter.setPen(Qt::blue);
    pter.drawText(20,50,"This is a Text!");
    pter.end();
    update();

}

在第二種方法中,paintGL和paintEvent的調(diào)用是一一對(duì)應(yīng)的;起初,我還以為paintGL每次更新,會(huì)被調(diào)用兩次,經(jīng)過(guò)測(cè)試,其只被paintEvent函數(shù)調(diào)用一次。

兩種方法都有其優(yōu)點(diǎn),在根據(jù)需要選擇;第二種方法,比較適合擴(kuò)展,無(wú)需改動(dòng)原因的代碼,只需要重載paintEvent,并在函數(shù)中調(diào)用paintGL,并繪制2D內(nèi)容即可。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多