Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 使用OpenGL视口在QGraphicsView中动态设置QGraphicscene_Qt_Qgraphicsview_Qgraphicsscene - Fatal编程技术网

Qt 使用OpenGL视口在QGraphicsView中动态设置QGraphicscene

Qt 使用OpenGL视口在QGraphicsView中动态设置QGraphicscene,qt,qgraphicsview,qgraphicsscene,Qt,Qgraphicsview,Qgraphicsscene,我有一个问题,我正在Windows下开发一个图形程序,几乎没有QGraphicscene和一个QGraphicsView,可以在运行时使用大量图形项更改场景,问题是,当我使用Qwidget viewport时,一切正常,但当我切换到OpenGL viewport时,当我更改场景时,前一个场景的内容仍然显示在QGraphicsView上,新场景的内容也会显示 有什么问题?这是改变场景方法的最佳解决方案还是我应该改变方法 下面是设置视图的代码 m_viewPort = new QOpenGL

我有一个问题,我正在Windows下开发一个图形程序,几乎没有QGraphicscene和一个QGraphicsView,可以在运行时使用大量图形项更改场景,问题是,当我使用Qwidget viewport时,一切正常,但当我切换到OpenGL viewport时,当我更改场景时,前一个场景的内容仍然显示在QGraphicsView上,新场景的内容也会显示

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

下面是设置视图的代码

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);
 }
另一个问题是,当我将“图形视图缓存模式”设置为“缓存背景”时,OpenGL视口将禁用!!QGraphicscene中的画家将返回光栅