如何在QGraphicsView中设置精确的场景rect

时间:2015-03-16 14:36:35

标签: qt graphics

我遇到QGraphicsView的问题,我不知道如何为QGraphicsView设置确切的视口。例如,我写了以下代码:

QGraphicsScene *scene = new QGraphicsScene();
QGraphicsEllipseItem * ellipse;
QPen pen(Qt::red);
QBrush brush(Qt::blue);
ellipse = scene->addEllipse(10,10,100,100,pen, brush);
ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(10,10,100,100);

我认为结果必须是视图内部的圆圈,其直径等于视口的高度或宽度。 但是当我运行程序时,它会在视图中显示一个中等大小的圆圈,这意味着graphicView的sceneRect比我指定的更大。任何人都知道为什么?

2 个答案:

答案 0 :(得分:3)

我自己找到了解决方案: 假设exactRect是您要放大的Exact矩形:

QRectF exactRect(20, 10, 300, 200);
ui->graphicsView->setSceneRect(exactRect);
ui->graphicsView->setCenterOn(exactRect.center());
QMatrix mtx;
mtx.scale(ui->graphicsView->width()/exactRect.width(),
          ui->graphicsView->height()/exactRect.height());
ui->graphicsView->setMatrix(mtx);

答案 1 :(得分:1)

我想你想要fitInView()

// when graphicsView is visible:
ui->graphicsView->fitInView(ui->graphicsView->sceneRect(), Qt::KeepAspectRatio);