QGraphicsView显示scene上所有的item

有时间会遇到这样的需求,显示scene上的所有节点,或者某个区域的节点,有人推荐使用QGraphics::fitInView这个函数,但是这个函数会根据你所给的QRect的大小来进行横向或者纵向的拉升,会使item变形,不建议使用。

在网上看到这样的办法,推荐使用:

float calc_full_scale()
{
    float dx = viewport()->geometry().width() / scene()->width();
    float dy = viewport()->geometry().height() / scene()->height();
    return dx < dy ? dx : dy;
}

可以通过QGraphicsView的大小和QGraphicsScene的大小来计算出缩放比例,然后通过调用QGraphicsView::scale函数来缩放,但是会遇到没次调用scale函数,他是在之前的基础上进行缩放,就是所item会被每次调整不断的缩小或放大,至此不满足我们的需求,所以需要我们来把之前的操作复原后再设置比例。

QGraphicsView的复原可参考我之前写的文章https://blog.csdn.net/huixianji0815/article/details/103177370

你可能感兴趣的:(Qt,Qt)