当前位置: 首页 > article >正文

QML states和transitions的使用

一、介绍

1、states

Qml states是指在Qml中定义的一组状态(States),用于管理UI元素的状态转换和属性变化。每个状态都包含一组属性值的集合,并且可以在不同的状态间进行切换。
通过定义不同的状态,可以在不同的应用场景中快速切换和管理UI元素的外观和行为,从而实现动态的用户界面。
在Qml中,可以通过State元素来定义不同的状态,以及在不同的状态间进行切换。可以使用Transitions元素来定义状态之间的过渡效果,以及属性值的变化。可以使用StateChangeScript元素在状态切换时执行一些自定义的脚本逻辑。
总而言之,Qml states提供了一种机制,用于管理和切换UI元素的不同状态,以及在状态之间进行过渡和属性变化的控制。

2、transitions

在QML中,可以使用transitions属性来定义动画效果。transitions属性是Item类的一个属性,用于定义从一个状态到另一个状态之间的过渡效果。
transitions属性是一个列表,每个列表项代表一个过渡效果。每个过渡效果由一个Transition子类定义,可以通过定义不同的过渡属性和动画属性来实现不同的动画效果。

二、实际使用

下面通过一个红绿灯实例来了解使用方法,效果展示:
在这里插入图片描述
源码分享:

import QtQuick

Window {
    width: 700
    height: 700
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        width: 200
        height: 500
        anchors.centerIn: parent
        color: "gray"
        Column{
            anchors.fill: parent
            spacing: 5
            Rectangle{
                id: lampGo
                width: 200
                height: 200
                radius: 100
                color: "green"
            }
            Rectangle{
                id: lampStop
                width: 200
                height: 200
                radius: 100
                color: "black"
            }
        }
        states: [
            State {
                name:"go"
                PropertyChanges {
                    target: lampGo
                    color:"green"
                }
                PropertyChanges{
                    target: lampStop
                    color:"black"
                }
            },
            State {
                name:"stop"
                PropertyChanges {
                    target: lampGo
                    color:"black"
                }
                PropertyChanges{
                    target: lampStop
                    color:"red"
                }
            }
        ]
        transitions: [
            Transition {
                from: "go"
                to: "stop"
                PropertyAnimation{
                    property: "color"
                    duration: 500
                }
            },
            Transition {
                from: "stop"
                to: "go"
                PropertyAnimation{
                    property: "color"
                    duration: 500
                }
            }
        ]
        MouseArea{
            anchors.fill: parent
            onClicked: {
                parent.state = parent.state === 'stop' ? 'go' : 'stop'
                console.log("click")
            }
        }
    }

}


http://www.kler.cn/a/487923.html

相关文章:

  • Figma如何装中文字体-PingFang苹方字体、Alibaba PuHuiTi阿里普惠
  • C++ 如何将 gRPC集成到机器人系统中
  • Unity3d 基于Barracuda推理库和YOLO算法实现对象检测功能
  • 【cuda学习日记】2.2 使用2维网络(grid)和2维块(block)对矩阵进行求和
  • 机器人技术:ModbusTCP转CCLINKIE网关应用
  • 数据结构:LinkedList与链表—面试题(三)
  • 油猴支持阿里云自动登陆插件
  • kotlin项目无法访问Java类的问题
  • 龙蜥Linux系统部署docker21.1.3版本
  • 同域名前后端分离项目 nginx配置实践
  • LCE(Local Cascade Ensemble)预测模型和LSTM(Long Short-Term Memory)模型在效果和特点上存在显著差异
  • 3D目标检测数据集——kitti数据集
  • 计算机网络之---HTTP协议
  • TDengine + MQTT :车联网时序数据库如何高效接入
  • 第一天 了解HarmonyOS的起源、发展、核心特性
  • 每天40分玩转Django:Django 实操图书管理系统
  • 一款面向数字孪生的数据中台
  • QT 常用控件的常用方法
  • Zookeeper 集群安装
  • 机房预约系统|Java|SSM|JSP|
  • 在 Vivado 的 Block Design 中,如果你不想让某个 IP 核的引脚连接到外部引脚,可以通过以下几种方法来处理:
  • Flutter Web 选取并上传图片
  • 在ubuntu下对NFS做性能测试
  • 【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
  • [java基础-集合篇]优先队列PriorityQueue结构与源码解析
  • 【JavaEE】—— SpringBoot项目集成百度千帆AI大模型(对话Chat V2)