QGLWidget + QGraphicsScene + QGraphicsView проблема - PullRequest
0 голосов
/ 06 мая 2010

Я хотел бы создать простой просмотрщик миниатюр, используя QGLWidget, QGraphicsScene и QGraphicsView. И у меня проблема с размещением QGLWidget на QGraphicsScene. Код похож на это:

QGraphicsScene *testScene = new QGraphicsScene (0, 0, 400, 400, 0);

QGLWidget *testWidget1 = new QGLWidget();
testWidget1->renderText("Test text1");

QGLWidget *testWidget2 = new QGLWidget();
testWidget2->renderText("Test text2");

testScene->addWidget(testWidget1);
testScene->addWidget(testWidget2);

QGraphicsView *testView = new QGraphicsView();
testView->setScene(testScene);
testView->show()

Можно ли разместить несколько QGLWidgets на QGraphicsScene / QGraphicsView? Где я что-то не так делаю? Есть ли другой компонент, на котором я мог бы встроить QGLWidgets и показать их на экране?

Спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Чтобы QGLWidget отображался в QGraphicsView, вы должны перенаправить рисование для него. Вы можете переписать paintGL так:

virtual void MyGLWidget::paintGL()
{
    QGLWidget::paintGL();
    //support redirecting painting
    QPaintDevice* device = QPainter::redirected(this);
    if (device != NULL && device != this)
    {
        QImage image = grabFrameBuffer();
        QPainter painter(this);
        painter.drawImage(QPointF(0.0,0.0),image);
    }
}

Работает хорошо для большинства платформ, но все равно отображается черный виджет.

1 голос
/ 06 мая 2010

В документации QGraphicsScene :: addWidget указано, что QGLWidget не является поддерживаемым типом виджета.

Воспроизведение QGLWidget в окне просмотра QGraphicsView, похоже, тоже не работает.

Edit:

На самом деле родительское QGLWidget в окне просмотра работает, если я поместил вызов renderText в метод paintGL моего тестового виджета GL.

0 голосов
/ 06 мая 2010

Из QGraphicsView документов:

Чтобы выполнить рендеринг с использованием OpenGL, просто вызовите setViewport(new QGLWidget). QGraphicsView становится владельцем виджета области просмотра.

Итак, чтобы нарисовать текст на виде, используйте QGraphicsTextItem вместо того, чтобы пытаться рисовать текст с помощью QGLWidget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...