我使用QGraphicsView / QGraphicsScene在Qt中绘图。只要我不断绘制更大的东西,缩放和适合工作得体。但是,当boundign矩形大小减小时 视图没有。它只显示相同(或更大的区域)。
在我重新绘制视图中的较小场景之前,我调用以下命令:
mpScene->clear();
mpScene->setSceneRect(QRectF());
mpView->setSceneRect(QRectF());
mpView->resetMatrix();
mpView->fitInView(this->sceneRect(),Qt::KeepAspectRatio);
唉,视图显示的画布仍在不断增长。我错过了什么?
场景和视图配置如下(仅为完整性而给出):
mpView->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
mpView->setCacheMode(QGraphicsView::CacheBackground);
mpView->setScene(mpScene);
mpView->setWindowFlags(Qt::FramelessWindowHint);
mpView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
mpView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
mpView->setFrameStyle(QFrame::NoFrame);
mpView->setAutoFillBackground(false);
mpView->setAttribute(Qt::WA_OpaquePaintEvent, true);
mpView->setAttribute(Qt::WA_NoSystemBackground, true);
//enabling OpenGl if possible
QGLFormat fmt = QGLFormat::defaultFormat();
fmt.setSampleBuffers(true);
fmt.setDoubleBuffer(true);
fmt.setSamples(256);
fmt.setDirectRendering(true);
QGLWidget* pGlWidget = new QGLWidget(fmt);
if(pGlWidget->isValid()) mpView->setViewport(pGlWidget);
else delete pGlWidget;
mpView->setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
注意:版本是Qt4.8
答案 0 :(得分:7)
您可以通过setSceneRect
控制基础场景的大小。在我的应用程序中,我已经将QGraphicsScene
子类化,并且在添加/删除功能中,我执行此操作:
setSceneRect(itemsBoundingRect());
这将计算场景中项目的新边界矩形,并强制场景为该大小。