缩放过程中有两种实现效果
图1 缩放view
图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中的相对位置会变化,例如
图3 缩放时Item位置相对View改变
出现这种情况的原因是
当Scene大小比View小时,Scene会将全部可用场景呈现在View中所以缩放过程中Item相对位置会变化。所以解决办法就是保证缩放过程中Scene始终大于View大小。