我在使用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);
我认为结果必须是视图内的圆圈,其直径等于视口的高度或宽度。但是当我运行该程序时,它在视图中显示了一个中等大小的圆圈,这意味着图形视图的 sceneRect 比我指定的要大。有人知道为什么吗?
我自己找到了解决方案:假设 exactRect 是您要放大的精确矩形:
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);
我想
你想要fitInView()
:
// when graphicsView is visible:
ui->graphicsView->fitInView(ui->graphicsView->sceneRect(), Qt::KeepAspectRatio);