2012-01-21 4 views
3

Я пытаюсь выполнить несколько манипуляций с изображениями с использованием OpenGL ES 2.0 и отобразить вывод в подклассовый QDeclarativeItem, который затем будет использоваться в моем графическом интерфейсе QML. я прочитал ответы, найденных здесь: http://developer.qt.nokia.com/forums/viewthread/4109 и удался вытащить красный к синему цветному прямоугольнику в моей QML GUI переопределения краски() Methode из QDeclarativeItem:Render Image в подклассовый QDeclarativeItem с использованием OpenGL

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

Я сделал аналогичную вещь, но решил по-другому: я использовал накладку .

Я просто поместил рендеринг OpenGL в свой виджет, который размещен поверх QDeclarativeView.

Это работает довольно хорошо, хотя вы не можете использовать ontop рендеринга OpenGL. Если вам действительно нужно, перейдите к другому представлению QML с полупрозрачным фоном.

Удачи.

+0

Спасибо, Гельмут, звучит многообещающе. Хотя я не уверен, как добавить виджет в качестве наложения на QDeclarativeView. У вас есть код, который поможет мне? Может быть довольно абстрактным, просто чтобы дать мне подсказку. Еще раз спасибо. – Markus

+0

Привет, идея такова: полагаю, вы использовали 'QDeclarativeView * myview'. Затем выполните 'QGLWidget * myglwidget = new QGLWidget (myview)' (используя свой собственный подкласс QGLWidget) и расположите его соответствующим образом. Таким образом, 'myglwidget' является дочерним элементом' myview', но не является реальным 'QGraphicsItem'. Это вам помогает? –