QGraphicsView详解

QGraphicsView大致的组成元素

QGraphicsScene——场景,作为一切的容器

QGraphicsScene是QGraphicsView所有部件的一个容器,所有的元素都会被包含在容器中进行展示,但是容器本身是不可见的,我们有时候可以对其进行染色处理使其变为有颜色的“幕布”,使用==Qt.QgraphicsView.setbackgraoud()==就可以对其进行染色,色彩当然可以从_Qt.color_中随意选取,喜欢其他风格的背景也可以自己重写背景。总的来说,Scene作为作画的“画布”而存在。

QGraphicsItem——图元,作为显示的主角

QGraphicsItem——图元,作为显示的主角
QGraphicsItem是线条、图案、色彩的载体,他们在画布上显示。图元分为可交互不可交互的种类,不可交互的图元是作为固定背景而存在的,在场景中不能与使用者进行互动,可以通过命令来进行调整,将其变成可以交互的图元具体是一个方法,额忘记详细怎么写了……反正是一个方法函数,直接作用在目标Item上即可,这里也可以看出可交互与不可交互的决定权在开发者手里,而且二者在结构上没有明确的界限,可以相互转化。Qt本身给出了许多基本图形元素,有兴趣可以去查官方文档,但我们一般拿来做图片显示比较多一些,所以这里我重点介绍图片图元本身的坐标系。

QGraphicsView——可视的视图

QGraphicsView——可视的视图
QGraphicsView是属于QGraphicsView大类的一个小元素,虽然名字相同,但是QGraphicsView小元素倾向于被定义为“一个可视化的视图”,加上其他的所有元素之后才成为了QGraphicsView 这一个大类。所以如果想要将某些东西可视化之后被使用者看见,就要先添加场景,再添加图元,最后作为视图显示在QGraphicsView部件上。

QGraphicsView包含坐标的元素

首先是Scene本身

首先是Scene本身
Scene作为承载图元的容器,要给每个图元分配一个二维或者多维坐标来确定图元的位置,因而就需要一组基或者说一个起始坐标系。在Scene中,左上角是作为坐标系的原点(0,0),向右边是X轴正方向,向下方是Y轴正方向。所以添加图元的时候可以进行设置图元起始位置的操作,利用*setPos()*方法就可以进行图元其实位置的设置,里面直接添加目标坐标即可。

然后是Item本身

尤其是二维图像的Item,Item作画的起始位置在Scene中有一个坐标,而Item本身里面的元素也是一个新的坐标系。就拿图片来说,经过QImage变为QPixmap,最后可以转化为QGraphicsItem显示出来。这时候的图元坐标系就是图像分辨率大小形成的带刻度的坐标系,比如一张分辨率960x960的图片,相对于图元自己来说,左上角就是(0,0),右下角就是(960,960),那么关键的就来了,**你可以将这个图元的(0,0)原点设置到Scene的任意一个起始坐标上。**这样一来,Scene相对于Item的坐标与Item本身自带的坐标系是平行的、等比例放大缩小的、同时是相对静止的。无论Scene放大还是缩小,Item相对位置是不变的,而Item中元素在Item本身的坐标系中的位置就不会受到Scene坐标系的干扰。

最后是View

其实就是Scene的坐标系。

关于部件坐标系与显示器坐标系或者说全局坐标系之间的关系

这个问题就比较复杂了,相关的换算关系因为场景和部件的不同而显得如此棘手。但是Qt本身提供了两种鼠标坐标,一种是部件内部相对于View的鼠标坐标event.pos(),可以拆分成event.pos().x()和event.pos().y()两个分别是x和y的部件内部的相对坐标;一个是全局的x和y的坐标globalX()和globalY(),这两个坐标,你靠近显示器左上角才会显示(0,0),而右下角就是所谓的你显示器的分辨率了。这样就解决了鼠标坐标在不同场景下坐标不同的问题,至于如何利用,那就要看自己的需求如何了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

♡小羊不吃草

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值