Qt中QGraphicsScene绘制后保持点与文本大小恒定的问题
解决Qt绘图程序中场景过大导致点与文本缩放过小的问题
嘿,我刚好和学生一起开发过一款基于Qt的QGraphicsScene与QGraphicsView的绘图程序,需求就是让用户在指定(x,y)位置绘制带上方文本的自定义点,正好碰到过你提到的这个场景范围过大时,点和文本因视图缩放变得极小看不清的问题,分享下我们的解决过程:
初始实现与问题出现
最开始我们写了AddPoint函数,负责创建红色椭圆点和对应的文本项并添加到场景中,还调用fitInView让视图自动适配当前场景范围,小范围场景下一切正常。但当场景范围拉得很大(比如y坐标达到1000)时,fitInView会把整个场景缩放到视图窗口内,导致点和文本变得极小,完全无法看清。
尝试过的无效方案
一开始我们尝试子类化QGraphicsView,通过手动调整缩放因子来控制点的显示大小,但这种方式带来了滚动条异常的问题——要么滚动范围不符合预期,要么缩放后滚动区域混乱,试了多种调整逻辑都没能彻底解决,反而让代码变得复杂。
最终的简洁解决方案
后来我们换了个思路:在创建点的图形项时,先将它的初始位置设为(-0.5, -0.5),之后再调用setPos(x, y)将其放置到用户指定的目标位置。就这么一个小改动,不管场景范围多大,点的大小始终保持恒定,不会被视图的缩放操作影响,完美解决了问题!
内容的提问来源于stack exchange,提问作者RedZ
相关产品推荐
相关产品推荐

