使用OpenGL Viewport在QGraphicsView中动态设置QGraphicsScene

时间:2017-11-28 17:48:13

标签: qt qgraphicsview qgraphicsscene

我有一个问题,我在Windows下开发一个图形程序,很少有QGraphicsScene和一个QGraphicsView可以在运行时用很多图形项改变场景,问题是当我使用Qwidget视口时一切正常但当我改变场景时切换到OpenGL视口时,前一场景的内容仍然出现在QGraphicsView上,新场景的内容也出现了。

有什么问题?它是改变场景方法的最佳解决方案还是我应该改变方法?

这是设置View

的代码
m_viewPort     = new QOpenGLWidget (this);

QSurfaceFormat format;
format.setProfile(QSurfaceFormat::CoreProfile);
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setSamples(4);

m_viewPort->setFormat(format);

ui->gV->setViewport(m_viewPort);

ui->gV->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);

//ui->gV->setCacheMode(QGraphicsView::CacheBackground);
ui->gV->setRenderHints(QPainter::Antialiasing| QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform| QPainter::TextAntialiasing);
ui->gV->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->gV->setVerticalScrollBarPolicy  (Qt::ScrollBarAlwaysOff);
ui->gV->setTransformationAnchor(QGraphicsView::NoAnchor);
ui->gV->setAutoFillBackground(false);
ui->gV->setAttribute(Qt::WA_OpaquePaintEvent, true);
ui->gV->setAttribute(Qt::WA_NoSystemBackground, true);

resize(boardBaseSize);

这里是将新场景设置为视图的代码

void GlScreenBoard::setShowScene(QGraphicsScene *scene, QString programName)
 {
 scene->setSceneRect(boardSceneRectBase);

 ui->gV->setScene(scene);
 }

另一个问题是当我将Graphics视图CacheMode设置为CacheBackground时,OpenGL视口禁用!! QGraphicsScene的画家回到Raster!

0 个答案:

没有答案