Qt6 Qt Quick UI原型学习QML第六篇

news2024/11/27 11:36:03

文章目录

  • 效果展示
  • 动画片第一小节
    • 源码(AnimationExample.qml)主文件
    • 解释语法
  • 源码子文件(ClickableImageV2.qml)
    • 解释语法


效果展示

在这里插入图片描述

动画片第一小节

源码(AnimationExample.qml)主文件

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12


Window {
    // 为窗口对象设置一个唯一标识符。
    id: window
    // 设置窗口对象可见。
    visible: true
    width: 600
    height: 600
    // 设置窗口的标题
    title: qsTr("QML study")

    Image {
        id: root
        source: "pic//C.png"
        // 设置图片的显示尺寸为400x400像素。
        // sourceSize: Qt.size(600, 600)
        anchors.fill: parent

        // 定义属性变量
        property int padding: 10
        property int duration: 3000
        property bool running: false

        Image {
            id: box
            x: root.padding;
            y: (root.height - height) / 2
            source: "pic//5.jpg"
            sourceSize: Qt.size(200,200)

            // 创建一个对x属性的数值动画。
            NumberAnimation on x {
                // 设置动画的目标值为root.width - box.width - root.padding
                to: root.width - box.width - root.padding
                duration: root.duration // 设置动画的持续时间为root.duration的值。
                running: root.running   // 设置动画是否运行的状态为root.running的值。
            }

            // 创建一个对rotation属性的旋转动画。
            RotationAnimation on rotation {
                // 设置旋转动画的目标值为360度。
                to:360
                duration: root.duration
                running: root.running
            }

            MouseArea {
                anchors.fill: parent
                onClicked: root.running = true
            }
        }
    }

    // 设置动画的目标值为40,持续时间为4000毫秒。意味着greenBox将会从初始位置移动到y坐标为40的位置,并在4000毫秒内完成该过程。
    ClickableImageV2 {
        id: greenBox
        x: 40; y: root.height-height
        source: "pic//1.jpg"
        text: qsTr("animation on property")
        NumberAnimation on y {
            to: 40; duration:3000
            running: root.running
        }
    }

    // 第二个对象使用Behavior on动画。此行为告诉属性它应该对值的每次变化进行动画处理。可以通过设置来禁用该行为enabled: false在……上Behavior元素。
    ClickableImageV2 {
        id: blueBox
        x: (root.width-width)/2; y: root.height-height
        source: "pic//2.jpg"
        text: qsTr("behavior on property")
        Behavior on y {
            NumberAnimation { duration: 3000 }
        }

        //onClicked: y = 40
        // random y on each click
        onClicked: y = 40 + Math.random() * (205-40)
    }

    // 第三个对象使用独立动画。动画被定义为它自己的元素,几乎可以出现在文档中的任何地方。
    ClickableImageV2 {
        id: redBox
        x: root.width-width-40; y: root.height-height
        source: "pic//3.jpg"
        // 当redBox被点击时,触发anim动画开始播放。动画会改变redBox的y属性,使其移动到目标值为40的位置。
        onClicked: anim.start()
        // onClicked: anim.restart()

        text: qsTr("standalone animation")

        NumberAnimation {
            id: anim
            // 设置动画的目标对象为redBox,即要改变属性的对象。
            target: redBox
            // 设置动画要改变的属性为y。
            properties: "y"
            to: 40
            duration: 3000
        }
    }
}

解释语法

  • import QtQuick 2.12:导入QtQuick模块的版本2.12,用于创建Qt快速应用程序的用户界面。

  • import QtQuick.Window 2.12:导入QtQuick.Window模块的版本2.12,用于创建窗口对象。

  • import QtQuick.Controls 2.12:导入QtQuick.Controls模块的版本2.12,用于创建用户界面控件。

  • Window {}:定义了一个窗口对象,并在花括号内设置窗口的属性和组件。

  • id: window:为窗口对象设置了一个唯一标识符。

  • visible: true:设置窗口对象可见。

  • width: 600:设置窗口的宽度为600个单位。

  • height: 600:设置窗口的高度为600个单位。

  • title: qsTr("QML study"):设置窗口的标题为"QML study",使用qsTr函数进行翻译。

  • Image {}:定义了一个图片对象,并在花括号内设置图片的属性和组件。

  • id: root:为图片对象设置了一个唯一标识符。

  • source: "pic//C.png":设置了图片的来源为"pic//C.png"。

  • anchors.fill: parent:设置图片对象填满父级容器。

  • property int padding: 10:定义了一个属性变量padding,并将其值设置为10。

  • property int duration: 3000:定义了一个属性变量duration,并将其值设置为3000。

  • property bool running: false:定义了一个属性变量running,并将其值设置为false。

  • Image {}:在图片对象内部定义了另一个图片对象,并设置其属性和组件。

  • id: box:为内部图片对象设置了一个唯一标识符。

  • x: root.padding:设置了内部图片对象的x坐标为root.padding的值。

  • y: (root.height - height) / 2:设置了内部图片对象的y坐标为(root.height - height) / 2的值。

  • source: "pic//5.jpg":设置了内部图片的来源为"pic//5.jpg"。

  • sourceSize: Qt.size(200,200):设置了内部图片的显示尺寸为200x200像素。

  • NumberAnimation on x {}:创建了一个对x属性的数值动画,并在花括号内设置动画的属性和值。

  • to: root.width - box.width - root.padding:设置动画的目标值为(root.width - box.width - root.padding)的值。

  • duration: root.duration:设置动画的持续时间为root.duration的值。

  • running: root.running:设置动画是否运行的状态为root.running的值。

  • RotationAnimation on rotation {}:创建了一个对rotation属性的旋转动画,并在花括号内设置动画的属性和值。

  • to:360:设置旋转动画的目标值为360度。

  • duration: root.duration:设置旋转动画的持续时间为root.duration的值。

  • running: root.running:设置旋转动画是否运行的状态为root.running的值。

  • MouseArea {}:定义了一个鼠标区域对象,并在花括号内设置区域的属性和事件。

  • anchors.fill: parent:设置鼠标区域对象填满父级容器。

  • onClicked: root.running = true:当鼠标区域被点击时,将root.running属性设置为true。

  • ClickableImageV2 {}:定义了一个可点击的图片对象,并在花括号内设置图片的属性和组件。

  • id: greenBox:为可点击的图片对象设置一个唯一标识符。

  • x: 40y: root.height-height:设置可点击的图片对象的x和y坐标的初始值。

  • source: "pic//1.jpg":设置可点击的图片的来源为"pic//1.jpg"。

  • text: qsTr("animation on property"):设置可点击的图片的文本为"animation on property",使用qsTr函数进行翻译。

  • NumberAnimation on y {}:创建了一个对y属性的数值动画,并在花括号内设置动画的属性和值。

  • to: 40:设置动画的目标值为40。

  • duration:3000:设置动画的持续时间为3000。

  • running: root.running:设置动画是否运行的状态为root.running的值。

  • Behavior on y {}:在可点击的图片对象内部使用Behavior元素,用于控制属性的动画处理方式。

  • NumberAnimation { duration: 3000 }:设置了对属性的数值动画,并设置动画的持续时间为3000。

  • onClicked: y = 40 + Math.random() * (205-40):当可点击的图片对象被点击时,将y属性设置为一个40到205之间的随机值。

  • ClickableImageV2 {}:定义了另一个可点击的图片对象,并在花括号内设置图片的属性和组件。

  • id: redBox:为可点击的图片对象设置一个唯一标识符。

  • x: root.width-width-40y: root.height-height:设置可点击的图片对象的x和y坐标的初始值。

  • source: "pic//3.jpg":设置可点击的图片的来源为"pic//3.jpg"。

  • onClicked: anim.start():当可点击的图片对象被点击时,触发anim动画开始播放。

  • text: qsTr("standalone animation"):设置可点击的图片的文本为"standalone animation",使用qsTr函数进行翻译。

  • NumberAnimation {}:定义了一个数值动画,用于控制属性的数值变化。

  • target: redBox:设置动画的目标对象为redBox,即要改变属性的对象。

  • properties: "y":设置动画要改变的属性为y。

  • to: 40:设置动画的目标值为40。

  • duration: 3000:设置动画的持续时间为3000。

源码子文件(ClickableImageV2.qml)

import QtQuick 2.0

// 用于创建一个可点击的项目(Item)
Item {
    id:root
    // 设置项目的宽度为column子元素的宽度。
    width: column.childrenRect.width
    height: column.childrenRect.height

    // 定义一个名为text的属性,该属性与label的text属性关联,允许在外部访问和修改该属性。
    property alias text: label.text
    property alias source: image.source

    // signal clicked - 声明一个clicked信号,表示项目被点击的事件。
    signal clicked

    Column {
        id:column
        spacing: 10
        Image {
            id: image
            sourceSize: Qt.size(90,90)
        }

        Text {
            id: label
           width: image.width
           // 设置文本的水平对齐方式为居中对齐。
            horizontalAlignment: Text.AlignHCenter
            wrapMode: Text.WordWrap
            color: "#000000"
        }
    }

    MouseArea {
        // 设置鼠标区域的大小与父元素(即Item)相同。
        anchors.fill: parent
        // 当鼠标区域被点击时,触发项目的clicked信号
        onClicked: root.clicked()
    }
}

解释语法

  • import QtQuick 2.0:导入QtQuick模块的版本2.0,用于创建Qt快速应用程序的用户界面。

  • Item {}:定义了一个可点击的项目,并在花括号内设置该项目的属性和组件。

  • id:root:为项目设置了一个唯一标识符。

  • width: column.childrenRect.width:设置项目的宽度为列(Column)子元素的宽度。

  • height: column.childrenRect.height:设置项目的高度为列(Column)子元素的高度。

  • property alias text: label.text:定义了一个名为text的属性,并将其与label的text属性相关联,允许在外部访问和修改该属性。

  • property alias source: image.source:定义了一个名为source的属性,并将其与image的source属性相关联,允许在外部访问和修改该属性。

  • signal clicked:声明了一个clicked信号,表示项目被点击的事件。

  • Column {}:定义了一个列(Column),用于组织子元素的垂直排列。

  • id:column:为列设置了一个唯一标识符。

  • spacing: 10:设置列中子元素之间的间隔为10个单位。

  • Image {}:定义了一个图片对象,并在花括号内设置图片的属性和组件。

  • id: image:为图片对象设置了一个唯一标识符。

  • sourceSize: Qt.size(90,90):设置了图片的显示尺寸为90x90像素。

  • Text {}:定义了一个文本对象,并在花括号内设置文本的属性和组件。

  • id: label:为文本对象设置了一个唯一标识符。

  • width: image.width:设置文本的宽度与图片的宽度相同。

  • horizontalAlignment: Text.AlignHCenter:设置文本的水平对齐方式为居中对齐。

  • wrapMode: Text.WordWrap:设置文本的换行模式为自动换行。

  • color: "#000000":设置文本的颜色为黑色。

  • MouseArea {}:定义了一个鼠标区域对象,并在花括号内设置区域的属性和事件。

  • anchors.fill: parent:设置鼠标区域的大小与父元素(即Item)相同,填满整个区域。

  • onClicked: root.clicked():当鼠标区域被点击时,触发项目的clicked信号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶感知系统-激光雷达

感知系统 现有的车载传感器主要包括超声波雷达、激光雷达、毫米波雷达、车载摄像头、红外探头等。主流的自动驾驶感知平台以雷达和车载摄像头为主,呈现多传感器融合发展趋势。基于测量能力和环境适应性,预计雷达和车载摄像头会保持其感知平台霸主地位&a…

Python Selenium设计模式及代码实现

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。 为什么要用POM 基于python selenium2开始UI级自动化测试并不是多么艰巨的任务。**只需要定位到元素,…

vue中export和export default的使用

<script> export default {name: HelloWorld } $(function () {alert(引入成功) }) </script> 1、export的使用 比喻index.js要使用test.js中的数据&#xff0c;首先在test.js文件中进行导出操作 代码如下&#xff1a; export function list() {alert("list…

EasyExcel写出包含多个sheet页的Excel

EasyExcel导出包含多个sheet页的Excel 1.引入依赖 引入如下的EasyExcel的依赖&#xff0c;或直接下载jar包 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></depende…

文心千帆大模型平台,一站式企业级大模型平台

文心千帆大模型平台&#xff0c;一站式企业级大模型平台 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 大模型时代 2. 文心千帆2.1 文心千帆介绍2.2 文心千帆应用场景2.3 文心千帆平台优势 3. 文心千帆初体验3.1 注册流程3.2 创建应用3.3 在线测试3.4 数据服务3…

玩转ChatGPT:Custom instructions (vol. 1)

一、写在前面 据说GPT-4又被削了&#xff0c;前几天让TA改代码&#xff0c;来来回回好几次才成功。 可以看到之前3小时25条的限制&#xff0c;现在改成了3小时50条&#xff0c;可不可以理解为&#xff1a;以前一个指令能完成的任务&#xff0c;现在得两条指令&#xff1f; 可…

如何将windows下的应用程序直接放到ubuntu下运行

安装wine https://blog.csdn.net/gc_2299/article/details/129077372 安装.NET https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472

Vue中的props配置

结构&#xff1a; main.js //引入Vue import Vue from vue //引入App import App from "./App"; //关闭Vue的生产提示 Vue.config.productionTip false//创建vm new Vue({el:#app,render:h>h(App) }) App.vue <template><div><Student name&qu…

运行Yolov5 7.0遇到的问题

遇到的错误 Traceback (most recent call last):File "E:\Users\user\anaconda3\envs\torch17\lib\site-packages\git\__init__.py", line 89, in <module>refresh()File "E:\Users\user\anaconda3\envs\torch17\lib\site-packages\git\__init__.py"…

RocketMQ Windows环境下启动导致C盘爆满原因及解决办法

原因 rocketmq取的默认路径是user.home路径&#xff0c;也就是用户的根目录&#xff0c;一般存储放在跟路径下的 /store目录。 在源码中也可以看到&#xff1a; 这里会有一个问题&#xff0c;RocketMQ很容易导致C盘空间不够&#xff0c;在使用过程中&#xff0c;创建一个主题默…

二,jmeter的简介和使用

文章目录 一、jmeter简介及安装1. 简介2. 安装 二、jmeter设置语言三、jmeter文件路径说明四、编写jmeter脚本五、乱码的处理&#xff1a;1. 请求内容出现乱码处理方法2. 响应内容出现乱码处理方法 六、写脚本方法扩展录制脚本&#xff1a; 七、 脚本功能增强 一、jmeter简介及…

pytorch学习——第二个模型(逻辑回归)

参考该博客系统学习Pytorch笔记二&#xff1a;Pytorch的动态图、自动求导及逻辑回归 c l a s s { 0 0.5 > y 1 0.5 ≤ y class\left\{ \begin{array}{rcl} 0 & & {0.5 > y}\\ 1 & & {0.5 \le y}\\ \end{array} \right. class{01​​0.5>y0.5≤y​ 根…

图数据库Neo4j学习一——基本介绍

文章目录 1各类数据库基本概念1.1关系型数据库&#xff08;SQL&#xff09;1.2非关系型数据库&#xff08;NoSQL&#xff09;1.3图数据库1.3.1图数据库特点1.3.2图数据库应用场景 2图数据库基本概念2.1用户访问菜单2.2节点&#xff08;用户、角色、菜单&#xff09;2.3关系&…

动态规划:从入门到入土系列(一)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 前言 本篇…

高级web前端开发工程师岗位的具体内容概述

高级web前端开发工程师岗位的具体内容概述1 职责&#xff1a; 1、负责前端页面开发和维护&#xff0c;并根据需求优化产品性能、用户体验、交互效果及各种主流浏览器以及各类型移动客户端的兼容适配工作; 2、配合产品经理和UI设计师&#xff0c;通过各种前端技术手段&#xf…

[MySQL]MySQL用户管理

[MySQL]MySQL用户管理 文章目录 [MySQL]MySQL用户管理1. 用户的概念2. 用户信息3. 创建用户4. 修改用户密码5. 删除用户6. MySQL中的权限7. 给用户授权8. 回收权限 1. 用户的概念 MySQL中的用户分为超级用户&#xff08;root&#xff09;和普通用户。超级用户的操作是不受权限…

IDEA对JPA@Query查询的文本块支持

IDEA对JPAQuery查询的文本块支持 参考网址 JPA查询方式&#xff1a;方法命名规则、Query查询、结果集类型转化器 原先JPA的Query注解查询存在的问题 编写SQL时需要在value的""内&#xff0c;使用换行时会拼接字符串&#xff0c;观感极差如果SQL中使用到了单引号&…

第三十二章:MySQL事务日志

第三十二章&#xff1a;MySQL事务日志 32.1&#xff1a;概述 事物有4种特性&#xff1a;原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢&#xff1f; 事物的隔离性有锁机制实现。而事物的原子性、一致性和持久性由事物的redo日志和undo日志来…

基于深度学习淡水鱼体重智能识别模型研究

工作原理为&#xff1a;首先对大众淡水鱼图片进行数据清洗并做标签分类&#xff0c;之后基于残差网络ResNet50模型进行有监督的分类识别训练&#xff0c;获取识别模型。其次通过搭建回归模型设计出体重模型&#xff0c;对每一类淡水鱼分别拟合出对应的回归方程&#xff0c;将获…

【基础算法】——双指针算法

文章目录 一、算法原理二、算法实战1. 力扣283 移动零2. 力扣1089 复写零3. 力扣15 三数之和4. 力扣18 四数之和 三、总结 一、算法原理 双指针算法是指在遍历对象的过程中不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向(快慢指针)或者相反方向&#xff08;…