尝试缩放图像时QGraphicsItem :: setTransformOriginPoint错误

时间:2011-03-11 20:26:24

标签: c++ qt qt4

我已经通过扩展QGraphicsItem创建了我自己的类,我希望这样做,以便当有人在这个项目上做轮子时,它会缩放。

通过这种方式,我可以在一个场景中拥有多个项目,并根据需要随意缩放每个项目。

问题是,我希望项目在鼠标光标下缩放,就像谷歌地图一样。也就是说,向前移动将继续平移图像并缩放图像,因此鼠标指针周围的区域始终处于可见状态。

void ImagePixmapItem::wheelEvent ( QGraphicsSceneWheelEvent * event ){

    update();
    qreal factor = 1.2;
    if (event->delta() < 0)
      factor = 1.0 / factor;

    scale(factor, factor);

    scaleFactor *=factor;
    this->scene()->setSceneRect(0,0,this->boundingRect().width(), this->boundingRect().height());

}

这是我用来做比例的代码。问题是,它似乎总是从左上角缩放。嗯,这是不可取的,因为如果我进出太多,最终我的感兴趣区域已移出屏幕,我必须手动滚动或平移到位置,缩放,平移等,直到达到理想的水平。

我尝试使用QGraphicsItem :: setTransformOriginPoint,但不管我放在那里的值是什么,它仍然可以从左上角开始缩放。

我可以添加哪些代码来发布所需的效果?

1 个答案:

答案 0 :(得分:1)

我在我的Image-Manipulation应用程序中实现了类似的功能(缩放视图并让鼠标下的区域保持原位并可见)但是我缩放整个图形视图而不是特定项目,所以我不知道如果此代码可以解决您的问题。

无论如何,这是我在我的子类QGraphicsView的构造函数中做的(在我设置场景之后):

setTransformationAnchor(AnchorUnderMouse);
setResizeAnchor(AnchorViewCenter);

我也使用上面的函数,每次调用后:    MyGraphicsView-&GT;的setTransform(变换);

我不确定这是否可以帮助你,但我希望如此。