首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

全新版FRIDA与安卓 应用安全与逆向实战宝典(完整无密)

核心代码,注释必读

// download:3w 52xueit com

vue 2.x 响应式

Object.defineProperty

爱学it学无止境

对 QGraphicsItem 进行变换有三种方式:

1. 使用 setRotation() 或 setScale();

2. 使用 setTransform();

3. 使用 setTransformations();

如果同时使用多种方式,变换效果将进行叠加。变换按照固定的顺序进行:

第一步:应用 transform() 指定的变换;

第二步:应用 transformations() 指定的变换;

第三步:应用 rotation(), transformOriginPoint() 指定的变换;

第四步:应用 scale(), transformOriginPoint() 指定的变换;

如果使用 setTransform() 指定旋转角度 A,再使用 setRotation() 指定旋转角度 B,那么 QGraphicsItem 旋转的角度就是 A + B。使用 rotation() 获取的角度值是 B;角度 A 只能从 transform() 中推算。然后使用 resetTransform() 复位的是 transform(),rotation() 中的角度仍然保留,那么此时 QGraphicsItem 旋转的角度就是 B 。也就是说三种变换方式数值的变换相互不影响。

对于有父子关系的 QGraphicsItem 父项目的变换将累加到子项目(即使在父项目中使用的是setRotation()方式进行的变换,叠加到子项目时只能从transform中获取该角度,并不会影响到子项目的 rotation()),子项目通过方法 sceneTransform() 获取所有累加的变换,通过 scenePos() 获取子项目在 scene 上的坐标。

二、解析 QGraphicsItem 当前旋转的角度

直接作用于 QGraphicsItem 的角度

不考虑父节项目对 QGraphicsItem 的影响,或者 QGraphicsItem 没有父项目时,计算 QGraphicsItem 当前旋转的角度,需要分别考虑 setRotation()、setTransform() 和 setTransformations() 设置的角度,分别计算后再进行累加即可。如果 QGraphicsItem 没有父项目,可以使用 sceneTransform() 获取所有累加变换后的 transform,从 transform 推算角度。

有父项目的 QGraphicsItem 的角度

考虑父项目对 QGraphicsItem 的变换影响,直接使用 sceneTransform() 获取所有累加变换后的 transform,再推算角度。

三、使用 QLineF 从 transform 提取角度

QLineF 提供的方法 angleTo() 可以帮助我们方便的计算2条直线间的夹角。要从 transform 中计算角度,可以先构建一条直线,然后使用 QTransform 的 map() 方法对直线进行变换。变换后的直线与原直线间的夹角就是 transform 旋转的角度。示例代码如下:

QTransform trans = item->sceneTransform(); QLineF line1{{0,0},{1,0}}; QLineF line2 = trans.map(line1); qreal angle = line2.angleTo(line1)

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O1yg9MCTKMP0oUL-eYgHAiuA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券