2010-05-05 4 views
0

QGLWidget, QGraphicsScene 및 QGraphicsView를 사용하여 간단한 미리보기 이미지 뷰어를 만들고 싶습니다. QGraphicsScene에 QGLWidget을 배치하는 데 문제가 있습니다. 코드는 다음과 유사합니다.QGLWidget + QGraphicsScene + QGraphicsView 문제

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() 

QGraphicsScene/QGraphicsView에는 몇 개의 QGLWidget을 배치 할 수 있습니까? 내가 뭔가 잘못하고있는 곳? QGLWidgets를 임베드 할 수있는 다른 컴포넌트가 화면에 표시되어 있습니까? 도움

QGraphicsView 문서에서

답변

1

QGraphicsScene::addWidget documentationQGLWidget이 지원되는 위젯 유형이 아니라고 명시합니다.

의 뷰포트에 QGLWidget을 양육하는 것은 효과가없는 것으로 보입니다.

편집 :

가 사실 일 내 시험 GL 위젯의 paintGL 방법 내에서 renderText 통화를 보류 제공 않습니다 뷰포트에 QGLWidget를 양육.

0

에 대한

감사 :

에서 OpenGL을 사용하여 렌더링하려면 setViewport(new QGLWidget)를 호출합니다. QGraphicsView는 뷰포트 위젯의 소유권을가집니다.

따라서보기에 텍스트를 그리려면 QGLWidget을 사용하여 텍스트를 그리는 대신 QGraphicsTextItem을 사용하십시오.

2

QGraphicsView에서 QGLWidget을 표시하려면 그림을 리디렉션해야합니다. 다음과 같이 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); 
    } 
} 

이것은 대부분의 플랫폼에서 잘 작동하지만 여전히 검은 색 위젯이 표시됩니다.

관련 문제