Qt4_基于项的图形视图

基于项的图形视图

对于用户自定义窗口部件和绘制二个或者几个项来说,使用QPainter 是理想的。在绘图中,如果需要处理从几个到几万的项时,而且要求用户能够单击、拖动和选取项, Qt 的视图类提供了对这一问题的解决方案。

Qt 的视图体系包括一个由QGrapmcsScene 充当的场景和一些由QGrapmcsltem 的子类充当的场景中的项。场景(以及它的项)在视图中显示,这样用户就可以看到了,它由QGrapmcsView 类充当。同一场景可以在多个视图中显示一一例如,便于部分地显示一个大的场景,或者以不同的变换来显示场景。
在这里插入图片描述
上图提供了几个预定义的QGraphicsItem子类,包括QGraphicsLineItem、QGraphicsPixmapItem、QGraphicsSimpleTextItem(应用于纯文本),以及QGraphicsTextItem(应用于多文本)。也可以创建自己的QGraphicsItem子类。

GrapmcsScene 是一个图形项的集合。一个场景有三层:背景层(background layer)、项层(item layer) 和前景层(foreground layer)。背景层和前景层通常由QBrush 指定,但也可能需要重新实现drawBackground()和drawForegtouhd(),以便可以实现完全控制。如果想用一个图片作为背景,可以简单地创建该图片作为QBrush 纹理。前景画刷可以设置成半透明的白色,给足一种褪色的效果,或者设置成交叉模式,提供一种格子覆盖的效果。

场景可以告诉我们哪些项是重叠的,哪些是被选取的,以及哪些是在一个特定的点处,或者在一个特定的区域内。场景中的项或者是最高层的项(场景就是其父对象) ,或者是子项(它们的父对象是另外的项)。任何应用于项的变换都会自动地应用于子对象。

视图体系提供了两种分组项的方法。一种方法是简单地使一个项成为另一个项的子项。另外一种方法是使用QGraphicsltemGroup。把一个项添加到组中不会引起任何变换,这些组可以很方便地处理大量的项,就像它们是一个单独项一样。

QGraphicsView是一个窗口部件,这个窗口部件可以显示场景,在需要的情况下提供滚动条,以及影响场景绘制方式的变换能力。这有利于支持缩放和旋转,帮助浏览场景。
在这里插入图片描述
默认情况下, QGraþhicsView 使用Qt的内置二维图形引擎绘图,但这可以改变,在其创建完后调用setViewport()改为使用OpenGL 窗口部件。

这个体系使用三种不同的坐标系统一一视口坐标、场景坐标和项坐标一一而且还包含从一个坐标系统映射到另一个坐标的函数。视口坐标是QGraphicsView的坐标。场景坐标是逻辑坐标,用来布置场景中的项。项坐标针对某一项,并且以(0,0) 点为中心。当在场景中移动项时,项坐标保持不变。在实际应用中,我们常常只关心场景坐标(用于布置上层的项),以及项坐标(用于布置子项和绘制项)。依照本身的坐标系统绘制项意味着我们不用去关心项在场景中的位置或者关心需要应用的变换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值