2012-01-21 21 views
3

我正在嘗試使用OpenGL ES 2.0執行多個圖像操作,並將輸出顯示到子類QDeclarativeItem中,然後將在我的QML GUI中使用它。 我經過這裏找到答案閱讀:http://developer.qt.nokia.com/forums/viewthread/4109 ,併成功在我的QML GUI中繪製一個紅色到藍色的長方形通過重寫QDeclarativeItem的paint()方法梅索德:使用OpenGL將圖像渲染到子類QDeclarativeItem中

void GLDeclarativeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    painter->beginNativePainting(); 
    glBegin(GL_QUADS); 
    glColor3ub(0,0,255); 
    glVertex2d(0, 0); 
    glVertex2d(0, height()); 
    glColor3ub(255,0,0); 
    glVertex2d(width(), height()); 
    glVertex2d(width(), 0); 
    glEnd(); 
    painter->endNativePainting(); 
} 

不過,我是什麼試圖實現的是繪製將作爲上述QDeclarativeItem(而不是從紅到藍色的內容)的內容在我的自定義QGLWidget中處理的圖像。

在我的自定義QGLWidget來繪圖,我使用:

void GLWidget::paintGL() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
} 

繪圖,這工作得很好。但是,我無法在GLWidget和我的GLDeclarativeItem中找到圖形之間的轉換。到目前爲止,我嘗試過的所有事情都給了我一個沒有任何內容的矩形。 感謝您的幫助!

回答

1

我做了類似的事情,但解決方法不同:我用覆蓋

我只是把OpenGL渲染放在它放在QDeclarativeView之上的它自己的小部件中。

雖然不能繪製OpenGL渲染的ontop,但它的工作原理相當好。如果您確實需要,可以使用半透明背景堆疊在另一個QML視圖上。

祝你好運。

+0

謝謝赫爾穆特,聽起來很有希望。雖然我不確定如何添加一個小部件作爲覆蓋到QDeclarativeView。你有任何代碼可以幫助我嗎?可以很抽象,只是爲了給我一個提示。再次感謝。 – Markus

+0

嗨,這個想法是這樣的:我想你使用了'QDeclarativeView * myview'。然後執行'QGLWidget * myglwidget = new QGLWidget(myview)'(使用你自己的QGLWidget子類)並相應地定位它。這樣,'myglwidget'是'myview'的孩子,而不是一個真正的'QGraphicsItem'。這對你有幫助嗎? –