一、背景
Halcon软件中的窗口可以实现图片的精准缩放和拖拽,特别的一点可以将图片缩放到窗口以外,所以在思考QT如何实现。
二、实现方式
方式上选择模型/视图模型,QGraphicsView,其中图片在哪个环节加载困扰了我一段时间。比如QGraphicsView和QGraphicsScene,视口和场景都可以显示图片。场景加载有个问题,当场景小于视口尺寸时则会居中显示,不符合想要的效果。最终选择了QGraphicsItem去显示图片。
其实Qt提供了继承自QGraphicsItem 的子类:QGraphicsPixmapItem,专门用于显示图片,所以最佳的方案是使用QGraphicsPixmapItem。
三、最终效果
四、注意事项
在实现缩放QGraphicsPixmapItem时注意选择合适的方式,最开始选择setScale,然后去实现聚焦到鼠标正下方总是达不到想要的效果,现在想来应该是计算坐标偏移时没有乘上缩放因子。
建议使用QTransform坐标转换的方式去做,在使用QTransform.translate(qreal x,qreal y)时就已经考虑到了缩放因子,很方便。
附上一小段缩放的代码,如下所示:
myGraphicsItem->setTransform(QTransform().scale(scale_X, scale_Y));
QPointF endItem= myGraphicsItem->mapFromScene(startScene);
curTransform = myGraphicsItem->transform();
myGraphicsItem->setTransform(curTransform.translate(endItem.x() - startItem.x(), endItem.y() - startItem.y()));