2010-05-05 85 views
0

我想用QGLWidget,QGraphicsScene和QGraphicsView創建一個簡單的縮略圖查看器。我在QGraphicsScene上放置QGLWidget時遇到問題。代碼與此類似:QGLWidget + QGraphicsScene + QGraphics查看問題

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上放置少量的QGLWidgets?我在哪裏做錯了什麼?有沒有其他的組件可以嵌入QGLWidgets並在屏幕上顯示它們?

感謝您的幫助

回答

1

QGraphicsScene::addWidget documentation指出QGLWidget不是受支持的窗口小部件類型。

QGLWidget父母放置到QGraphicsView的視口上似乎也不起作用。

編輯:

其實養育一個QGLWidget視口不工作提供了我把renderText呼叫我的測試GL部件的paintGL方法中。

0

QGraphicsView文檔:

要渲染使用OpenGL,只需調用setViewport(new QGLWidget)。 QGraphicsView擁有視口小部件的所有權。

因此,要在視圖上繪製文本,請使用QGraphicsTextItem而不是試圖使用QGLWidget來繪製文本。

2

要使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); 
    } 
} 

它適用於大多數平臺,但仍然會顯示黑色小部件。