Визуализация изображения в подклассе QDeclarativeItem с использованием OpenGL - PullRequest
3 голосов
/ 21 января 2012

Я пытаюсь выполнить несколько манипуляций с изображениями с использованием OpenGL ES 2.0 и отобразить вывод в подклассе QDeclarativeItem, который затем будет использоваться в моем QML GUI.Я прочитал ответы, найденные здесь: http://developer.qt.nokia.com/forums/viewthread/4109, и мне удалось нарисовать прямоугольник от красного до синего в моем графическом интерфейсе QML, переопределив метод paint () 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 (вместо содержимого, окрашенного в красный-синий).

Внутри моегоcustom QGLWidget Я использую:

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

для рисования, который работал нормально.Тем не менее, я не могу найти преобразование между чертежом в моем GLWidget и моем GLDeclarativeItem.Все, что я пробовал до сих пор, просто дало мне прямоугольник без какого-либо содержания.Спасибо за вашу помощь!

1 Ответ

1 голос
/ 25 января 2012

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

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

Удачи.

...