最近在绘制Qt下的橡皮筋线,但是大多搜到的都是利用Qt的QRubberBand类。QRubberBand可以实现橡皮筋框选取,即便是QRubberBand::Line,也只是绘制水平或垂直的线,并不能满足自己需要,也就是绘制360度任意角度的线。对于这个情况,就只能靠自己动手,丰衣足食了。实现起来主要有一下几点,同时也算是一点小总结:
1:感觉最好使用QGraphicsLineItem类。继承QGraphicsItem自定义一个item的话感觉意义不大,QGraphicsLineItem完全可以满足要求。
2:利用QGraphicsLineItem绘制出来的线,当在QGraphicsView中的mousePressEvent、mouseMoveEvent、mouseReleaseEvent中进行绘制的时候,会发现event->pos()得到的点并不是屏幕中所点击的位置,会有一定偏差,原因很简单,场景坐标和图形项坐标不一致,需要将图形项坐标映射到场景中去,所以对于event所获得的点,需要做个转换,即利用view的mapToScene,来得到真正所要使用的点。
3:绘制好后还有个问题,当按下鼠标并进行拖动的时候,会发现地图会有白色斑块,而大小恰好是所绘制的