2012-01-21 6 views
3

OpenGL ES 2.0を使用して複数の画像操作を行い、サブクラス化されたQDeclarativeItemに出力を表示して、QML GUIで使用します。 私はここで見つけるの答えを読んで:http://developer.qt.nokia.com/forums/viewthread/4109 をしてQDeclarativeItemの塗料()Methodeのオーバーライドすることで、私のQML GUI内の赤と青の色の四角形を描画することに成功しました:私は何を、しかし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(); 
} 

を私のカスタムQGLWidget内で扱われる画像を上記のQDeclarativeItem(赤から青の色のコンテンツではなく)の内容として描画することです。私のカスタムの中で

私が使用していますQGLWidget:罰金働いた描画用

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

、。しかし、私はGLWidget内の図面と私のGLDeclarativeItem間の変換を見つけることができません。私がこれまでに試したことは、まったくコンテンツがない四角形を私に与えただけです。 ご協力いただきありがとうございます!

答えて

1

私は同様のことをしましたが、別の方法で解決しました。オーバーレイを使用しました。

QDeclarativeViewの上に配置された独自のウィジェットで、OpenGLレンダリングを単に実行します。

これはかなりうまくいきますが、OpenGLレンダリングのontopを描画することはできません。本当に必要な場合は、半透明の背景で別のQMLビューを重ねてください。

幸運。

+0

ありがとうヘルムート、有望な音。私はどのように私はQDeclarativeViewにオーバーレイとしてウィジェットを追加することができますか分からないが。私を助けるコードはありますか?私にヒントを与えるために、かなり抽象的にすることができます。再度、感謝します。 – Markus

+0

こんにちは、このアイデアは次のようなものです。あなたは 'QDeclarativeView * myview'を使ったと思います。それから、 'QGLWidget * myglwidget = new QGLWidget(myview)'を(独自のQGLWidgetサブクラスを使って)実行し、それに応じて配置します。そうすれば、 'myglwidget'は' myview'の子ですが、本当の 'QGraphicsItem'ではありません。これはあなたを助けますか? –