QT QML 练习8-Simple Transformations

server/2024/10/22 21:03:11/

在这里插入图片描述

  1. 简单的转换(Simple Transformations)
    转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移,旋转,缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始。

简单的位移是通过改变x,y坐标来完成的。旋转是改变rotation(旋转)属性来完成的,这个值使用角度作为单位(0~360)。缩放是通过改变scale(比例)的属性来完成的,小于1意味着缩小,大于1意味着放大。旋转与缩放不会改变对象的几何形状,对象的x,y(坐标)与width/height(宽/高)也类似。只有绘制指令是被转换的对象。

在我们展示例子之前我想要介绍一些东西:ClickableImage元素(ClickableImage element),ClickableImage仅仅是一个包含鼠标区域的图像元素。我们遵循一个简单的原则,三次使用相同的代码描述一个用户界面最好可以抽象为一个组件。

// ClickableImage.qml// Simple image which can be clickedimport QtQuick 2.0Image {id: rootsignal clickedMouseArea {anchors.fill: parentonClicked: root.clicked()}
}

我们使用我们可点击图片元素来显示了三个火箭。当点击时,每个火箭执行一种简单的转换。点击背景将会重置场景。

// transformation.qmlimport QtQuick 2.0Item {// set width based on given backgroundwidth: bg.widthheight: bg.heightImage { // nice background imageid: bgsource: "assets/background.png"}MouseArea {id: backgroundClicker// needs to be before the images as order matters// otherwise this mousearea would be before the other elements// and consume the mouse eventsanchors.fill: parentonClicked: {// reset our little scenerocket1.x = 20rocket2.rotation = 0rocket3.rotation = 0rocket3.scale = 1.0}}ClickableImage {id: rocket1x: 20; y: 100source: "assets/rocket.png"onClicked: {// increase the x-position on clickx += 5}}ClickableImage {id: rocket2x: 140; y: 100source: "assets/rocket.png"smooth: true // need antialisingonClicked: {// increase the rotation on clickrotation += 5}}ClickableImage {id: rocket3x: 240; y: 100source: "assets/rocket.png"smooth: true // need antialisingonClicked: {// several transformationsrotation += 5scale -= 0.05}}
}

火箭1在每次点击后X轴坐标增加5像素,火箭2每次点击后会旋转。火箭3每次点击后会缩小。对于缩放和旋转操作我们都设置了smooth:true来增加反锯齿,由于性能的原因通常是被关闭的(与剪裁属性clip类似)。当你看到你的图形中出现锯齿时,你可能就需要打开平滑(smooth)。

注意

为了获得更好的显示效果,当缩放图片时推荐使用已缩放的图片来替代,过量的放大可能会导致图片模糊不清。当你在缩放图片时你最好考虑使用smooth:true来提高图片显示质量。

使用MouseArea来覆盖整个背景,点击背景可以初始化火箭的值。

注意

在代码中先出现的元素有更低的堆叠顺序(叫做z顺序值z-order),如果你点击火箭1足够多次,你会看见火箭1移动到了火箭2下面。z轴顺序也可以使用元素对象的z-property来控制。

由于火箭2后出现在代码中,火箭2将会放在火箭1上面。这同样适用于MouseArea(鼠标区域),一个后出现在代码中的鼠标区域将会与之前的鼠标区域重叠,后出现的鼠标区域才能捕捉到鼠标事件。

请记住:文档中元素的顺序很重要。


http://www.ppmy.cn/server/133996.html

相关文章

pod相关面试题总结(持续更新)

1:当一个Pod有多个容器时,如果连接到指定的容器? #查看当前空间下的pod [rootmaster210 pods]# kubectl get pods NAME READY STATUS RESTARTS AGE linux85-nginx-tomcat 2/2 Running 0 63s [rootmaster210 …

前端面试经验总结1(简历篇)

本文分为3部分,分别为第一部分简历篇,第二部分经典问题篇以及第三部分知识体系篇,都是个人面试经验及同行面试经验总结和整理。 我对于简历的理解是这样的,简历的作用是让看简历的人能够快速、准确地捕捉到有用信息: 你…

[创业之路-154] :图解:结构需求分析、结构设计、加工、生产的整个流程与常见问题

目录 前言: 一、结构生产的流程中涉及的人员 二、结构设计人的主要职责 三、常见问题 1、需求分析 2、结构设计 3、加工 4、组装 5、测试 前言: 一、结构生产的流程中涉及的人员 在结构生产的流程中,涉及的人员及其职责通常如下&am…

开源的 FOC(Field-Oriented Control) 项目

开源的 FOC(Field-Oriented Control) 项目通常用于控制无刷直流电机(BLDC)和永磁同步电机(PMSM)。这些项目可以实现高效的电机控制,广泛应用于机器人、无人机、电动车等领域。以下是一些著名的开…

有趣的css - 跷跷板加载动画

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是使用 css 模拟一个跷跷板效果的加载动画效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面…

YOLOv11模型改进-注意力-引入简单无参数注意力模块SimAM 提升小目标和遮挡检测

本篇文章将介绍一个新的改进机制——卷积和注意力融合模块SimAM ,并阐述如何将其应用于YOLOv11中,显著提升模型性能。首先,SimAM 是一种用于卷积神经网络的简单且无参数的注意力模块,它基于神经科学理论定义能量函数来计算 3-D 注…

Python接口自动化浅析如何处理接口依赖

本文主要介绍如何提取token、将token作为类属性全局调用及充值接口如何携带token进行请求,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖 以下主要介绍如何提取token、将token作为类属性全局调用及充值接口如何携带token进行请求。…

RabbitMQ高级特性详解

前言 RabbitMQ是一款广泛使用的开源消息队列软件,它基于AMQP(Advanced Message Queuing Protocol)标准实现。本文将带你深入了解RabbitMQ的一些高级特性,包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等&#xff…