我有一个问题,我在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!