我使用QGraphicsView/QGraphicsScene在Qt中绘图.只要我不断绘制更大的东西,缩放和适合工作得体.但是,当boundign矩形大小减小时View不会.它只显示相同(或更大的区域).
在我在视图上重新绘制一个较小的场景之前,我调用以下命令:
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
您可以通过控制基础场景的大小setSceneRect
.在我的应用程序中,我已经进行了子类化QGraphicsScene
,在添加/删除函数中,我执行此操作:
setSceneRect(itemsBoundingRect());
这将计算场景中项目的新边界矩形,并强制场景为该大小.