QT中QGraphics的view,scene,items的关系

用通俗易懂的话讲清楚view,scene,items三者之间的关系,如果有不对的地方,接受大家的批评指正。

items就好比各种事物,是实实在在存在的;

scene就好比现实中的场景,也是实实在在存在的,scene本身没有边界,里面可以放置很多事物,即items。

view即为视窗,你可以理解为一个摄像机,把摄像机放在scene前,摄像机的取景框是有边界的,所以从view看到的scene只是scene的一部分,我们转动摄像机的镜头就可以看到scene的其他地方。

view层可以做的事情就是缩放视窗,转动视窗,移动视窗。这些操作很好理解,还是摄像机,我们调整摄像机镜头的焦段,放大后看到的items就变大了,但是场景中显示的内容就变少了,反之亦然。转动和移动视窗就是对摄像机的拍摄角度进行调整。其他的操作例如鼠标操作点击,拖动items在这一层是没办法实现的,items是实际存在的,你所能操作的只是摄像机里面的图像,实际物体并没有发生变化。所以要想对事物进行操作,就需要将鼠标信号向后传递。

scene相当于一个大大的容器,里面存放着items,收到前面传来的信号之后,添加item就是向scene中添加事物,其他的可以类比。能对scene层进行的操作也可以类比了,就是场景的背景,布局等待,天空的颜色,地形地貌等等,简单点就是画板的背景。对场景scene的变动跟items是有很多关系的,一个个items的变动组成了场景scene的变动。具体到某一个事物的操作,就要转到item了。

item就是一个特定的事物,比如一张桌子,我要搬动他,在计算机里的操作就是通过鼠标选中图元,然后拖动图元,这里选中操作是在场景里找到这个桌子,而找到后要进行的操作就是针对桌子这个事物了。

前面讲到的是信号如何从前台传递到后面,然后实现要进行的操作,那么,操作完成之后,变化的呈现是从后向前倒回去的,事物的改变导致场景的改变,而观察场景的view就回呈现出不同的结果,要使view能够实时观察到变化,就是不停地刷新update,这样一个实时交互的场景就呈现出来了。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QGraphicsView类具有以下成员函数:mapToScene()、mapFromScene()、setScene()、scene()、render()、invalidateScene()、setMatrix()、matrix()、setDragMode()、dragMode()、setViewportUpdateMode()、viewportUpdateMode()、setOptimizationFlags()、optimizationFlags()、setBackgroundBrush()、backgroundBrush()、ensureVisible()、centerOn()和resetCachedContent()。 ### 回答2: Qt QGraphicsView类是用于显示和编辑二维图形对象的视图类。它提供了许多成员函数用于操作和控制视图的行为。 一些常用的成员函数包括: 1. setScene(QGraphicsScene* scene): 设置视图要绘制的场景。场景的图形项将在视图显示。 2. setRenderHint(QPainter::RenderHint hint, bool enabled = true): 设置渲染提示,用于控制视图的绘制方式。例如,可以禁用反锯齿以提高性能。 3. setViewportUpdateMode(ViewportUpdateMode mode): 设置视图的视口更新模式。可以选择在需要时自动更新视口或手动更新视口。 4. scale(qreal sx, qreal sy): 缩放视图。通过指定x和y方向上的缩放因子,可以将图形项在视图放大或缩小。 5. rotate(qreal angle): 旋转视图。按照给定的角度以顺时针方向旋转视图。 6. resetMatrix(): 重置视图的变换矩阵,将视图恢复到初始状态。 7. centerOn(const QPointF& pos): 将视图的心点设置为给定的场景坐标。视图将滚动以使该点位于视图心。 8. items(const QRectF& rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape): 返回与指定矩形相交或包含在内的图形项。可以根据需要指定图形项的选择模式。 9. setDragMode(DragMode mode): 设置视图的拖动模式。拖动模式包括拖拽图形项、滚动视图和框选图形项等。 这些是只是Qt QGraphicsView类的一部分成员函数。使用这些函数,可以方便地控制和操作QGraphicsView视图,并实现自定义的二维图形编辑和显示功能。 ### 回答3: Qt QGraphicsView 是一个可以用于显示和处理大型场景的二维图形视图控件。以下是一些常用的 QGraphicsView 成员函数: 1. QGraphicsView(QWidget *parent = nullptr):构造函数,创建一个 QGraphicsView 对象。 2. setScene(QGraphicsScene *scene):设置与视图关联的图形场景。 3. scene():返回与视图关联的图形场景。 4. setRenderHint(QPainter::RenderHint hint, bool on = true):设置渲染提示,例如抗锯齿和文本反走样。 5. rotate(qreal angle):以某个角度旋转视图。 6. scale(qreal sx, qreal sy):按指定的比例缩放视图。 7. translate(qreal dx, qreal dy):平移视图。 8. setViewportUpdateMode(ViewportUpdateMode mode):设置视口更新模式,控制何时更新视口。 9. setDragMode(DragMode mode):设置拖拽模式,用于移动图形项。 10. setInteractive(bool enabled):设置是否允许与图形项进行交互。 11. render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF()):渲染视图以进行打印或导出。 12. resetMatrix():重置视图的变换矩阵。 13. fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRatioMode):根据指定的矩形大小自动调整视图的缩放级别。 14. mapToScene(const QPoint &point):将视图坐标转换为场景坐标。 15. mapFromScene(const QPointF &point):将场景坐标转换为视图坐标。 以上仅是一些常用的成员函数,Qt QGraphicsView 还有许多其他的成员函数可以用于控制和操作图形视图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值