我已经通过扩展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,但不管我放在那里的值是什么,它仍然可以从左上角开始缩放。
我可以添加哪些代码来发布所需的效果?
答案 0 :(得分:1)
我在我的Image-Manipulation应用程序中实现了类似的功能(缩放视图并让鼠标下的区域保持原位并可见)但是我缩放整个图形视图而不是特定项目,所以我不知道如果此代码可以解决您的问题。
无论如何,这是我在我的子类QGraphicsView的构造函数中做的(在我设置场景之后):
setTransformationAnchor(AnchorUnderMouse);
setResizeAnchor(AnchorViewCenter);
我也使用上面的函数,每次调用后: MyGraphicsView-&GT;的setTransform(变换);
我不确定这是否可以帮助你,但我希望如此。