QGraphicsScene中Item缩放问题

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

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值