实战PyQt5: 087-视图类QGraphicsView

本文介绍了QGraphicsView在PyQt5中的使用,它是用于显示QGraphicsScene场景的部件,支持滚动、缩放、旋转等操作。QGraphicsView可以通过setScene()设置场景,利用setTransform()进行空间变换,同时支持鼠标和键盘交互。文中还展示了如何通过rotate()和scale()函数进行空间变换操作,并提供了测试代码示例。

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

QGraphicsView简介

QGraphicsView是一个用于显示QGraphicsScene场景的部件。它提供一个可以滚动显示QGraphicsScene内容的窗口。

可以在构建QGraphicsView的时候,可以QGraphicsScene场景对象作为参数,或者在构建之后使用setScene()来设置场景。在调用show()函数后,默认情况下,视图将滚动到场景的中心并显示此时可见的所有图元,例如:

scene =QGraphicsScene()
scene.addText('Hello, world!)
view = QGraphicsView(scene)
view.show()

可以使用滚动条或者调用centerOn()显示地滚动到场景的任何位置。在调用centerOn()时,视图会把传入的参数作为中心点以确保该点位于视图的中心。

QGraphics可用于显示整个场景或者场景的一部分。在默认情况下,第一次显示时,会通过调用QGraphicsScene.itemsBoundingRect()来自动检测可视区域,调用setSceneRect()可以自己设置可视区域。

QGraphicsView通过调用render()还可视化场景。默认情况下,根据缺省的渲染提示使用QPainter将图元渲染到视口上。调用setRenderHints()可更改QGraphicsView传递给QPainter的渲染提示。

默认情况下,QGraphicsView的视口窗口部件为一个常规的QWidget,可以通过viewport() 来访问这个部件,也可以通过调用setViewport()来替换它。如果要使用OpenGL 来渲染,只需调用setViewport()将视口的窗口部件设置为QOpenGLWidget对象即可。

QGraphicsView支持仿射变换,使用setTransform()设置其变换矩阵。最常用的两种变换是缩放和旋转,可分别调用roatate()和scale()来完成。

可以使用鼠标和键盘与场景中的图元进行交互。QGraphicsView将鼠标和键盘事件转换成场景事件,并将其转发到可视化场景。最后,处理事件并对事件做出反应的是单个图元。例如,如果单击一个可选图元,则该图元通常会让场景知道它已被选中,并且它还将重绘自身以显示选择矩形。可以通过创建QGraphicsView的子类并重新实现鼠标和键事件处理程序来提供自己的自定义场景交互。

 

QGraphicsView常用方法:

  • setScene(): 设置场景,如果场景已经被设置到视图中,则什么都不做。
  • scene(): 返回当前视图中的可视化场景对象。
  • setCacheMode(): 设置缓存模式,这个属性控制视图的哪一部分存储在缓存中,QGraphicsView可以预存一些内容在QPixmap中,然后被绘制到视口上,这样做的目的是加速整体区域重绘的速度。默认情况不使用缓存模式。
  • cacheMode(): 返回缓存模式。
  • setViewportUpdateMode(): 设置视口更新模式,QGraphicsView 使用这个属性来决定当场景改变或者暴露时候如何刷新场景的区域,通常不需要修改这个属性,但是在有些情况下做这个工作可以改进绘图性能。
  • setTransformationAnchor(): 设置视口变换的锚点,这个属性控制当视图做变换时应该如何摆放场景的位置。默认情况是在变换时保持视图的中心点不变。
  • scale(): 缩放当前的视图。
  • rotate(): 顺时针旋转当前视图。
  • translate(): 平移当前的视图。
  • setTransform():设置视图当前的转换矩阵。
  • transform():获得视图当前的转换矩阵。
  • shear(): 剪切当前视图变换。

QGraphicsView常用信号:

  • rubberBandChanged: 橡皮筋(rubber band)矩形发生改变时,发生该信号。

QGraphicsView类继承关系:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值