Qt下绘制橡皮筋线

本文介绍了在Qt环境下如何实现橡皮筋线的绘制,特别是绘制360度任意角度的线。作者指出QRubberBand类无法满足需求,建议使用QGraphicsLineItem。在处理鼠标事件时,需要将图形项坐标转换为场景坐标。此外,拖动过程中可能出现的地图白色斑块问题,通过更新底图item解决。文章最后提到了在设置底图item和场景时遇到的冲突及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在绘制Qt下的橡皮筋线,但是大多搜到的都是利用Qt的QRubberBand类。QRubberBand可以实现橡皮筋框选取,即便是QRubberBand::Line,也只是绘制水平或垂直的线,并不能满足自己需要,也就是绘制360度任意角度的线。对于这个情况,就只能靠自己动手,丰衣足食了。实现起来主要有一下几点,同时也算是一点小总结:

1:感觉最好使用QGraphicsLineItem类。继承QGraphicsItem自定义一个item的话感觉意义不大,QGraphicsLineItem完全可以满足要求。

2:利用QGraphicsLineItem绘制出来的线,当在QGraphicsView中的mousePressEvent、mouseMoveEvent、mouseReleaseEvent中进行绘制的时候,会发现event->pos()得到的点并不是屏幕中所点击的位置,会有一定偏差,原因很简单,场景坐标和图形项坐标不一致,需要将图形项坐标映射到场景中去,所以对于event所获得的点,需要做个转换,即利用view的mapToScene,来得到真正所要使用的点。

3:绘制好后还有个问题,当按下鼠标并进行拖动的时候,会发现地图会有白色斑块,而大小恰好是所绘制的item的rect大小,分析了下,是因为底图没有同时进行update的缘故。但因为底图起初是在mainwindow.cpp中进行添加的,即所谓的先设置场景,在设置视图,然后利用场景将item添加其中。但这样做的弊端就是,无法在view中获得mainwindow.cpp中所添加的底图,也就无法在view的鼠标事件中对地图item进行update,所以看来还需要将底

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值