QGraphicsScene中Item缩放问题

缩放过程中有两种实现效果
QGraphicsScene中Item缩放问题_第1张图片
图1 缩放view
QGraphicsScene中Item缩放问题_第2张图片
图2 缩放scene
可以看出缩放view时Item显示也会跟着放大缩小,缩放scene则Item显示大小不会随之变化。Item几何信息是根据View视口而定?

源码

//此时View设置大小为400X300
scene->setSceneRect(0,0,4000,3000);
QGraphicsRectItem* item = new QGraphicsRectItem(10,10,100,100);
item->setBrush(Qt::blue);
scene->addItem(item);
//重写承载View控件类的keyPressEvent实现简单缩放
//A缩小,B放大
   switch (event->key()) {
case Qt::Key_A:
    qDebug() <<"A button";
    //view->scale(0.5,0.5); //缩放view才能看到Item变大缩小, 除非Scene已经缩放到比View小 此时Scene应该是在View中部
    scene->setSceneRect(0,0,scene->width()*0.5, scene->height()*0.5);
    break;
case Qt::Key_B:
    qDebug() <<"B button";
    //view->scale(2,2);
    scene->setSceneRect(0,0,scene->width()*2, scene->height()*2);
    break;
default:
    break;
}

然而在应用中有一个问题:Scene大小设置过小,在实际缩放时Item在View中的相对位置会变化,例如
QGraphicsScene中Item缩放问题_第3张图片
图3 缩放时Item位置相对View改变
出现这种情况的原因是
当Scene大小比View小时,Scene会将全部可用场景呈现在View中所以缩放过程中Item相对位置会变化。所以解决办法就是保证缩放过程中Scene始终大于View大小。

你可能感兴趣的:(QT)