QT实现Halcon窗口的缩放,拖拽的方式

一、背景

        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()));

你可能感兴趣的:(qt,开发语言)