QML 之状态

文章目录

    • 状态
      • 示例 1:矩形的可见/隐藏切换
        • 功能介绍:
      • 示例 2:按钮的激活/非激活状态
        • 功能介绍:
      • 示例 3:面板的展开/折叠
        • 功能介绍:
      • 示例 4:灯泡的开/关
        • 功能介绍:
      • 总结


状态

状态是界面中元素的一种特定外观或行为,常见的状态有:可见/隐藏激活/非激活展开/折叠等。通过改变元素的属性或样式,可以实现这些状态的切换,从而让界面更加动态和富有交互性。

QML 中,状态由 State 元素定义。每个状态需要一个唯一的名称(name),并定义在该状态下,目标元素的属性或样式会如何改变。我们通过 states 属性列出所有可能的状态,并使用 state 属性指定元素的当前状态。

接下来通过几个简单的例子演示如何在 QML 中使用状态。


示例 1:矩形的可见/隐藏切换

在这个例子中,我们实现了一个蓝色矩形,通过鼠标点击可以切换其可见隐藏状态。

import QtQuick
import QtQuick.ControlsRectangle {width: 200height: 200color: "lightgray"Rectangle {id: rectanglewidth: 100height: 100anchors.centerIn: parentcolor: "blue"state: "visibleState"  // 初始状态states: [State {name: "visibleState"PropertyChanges { target: rectangle; opacity: 1 }},State {name: "hiddenState"PropertyChanges { target: rectangle; opacity: 0 }}]}MouseArea {anchors.fill: parentonClicked: {// 切换状态rectangle.state = (rectangle.state === "visibleState") ? "hiddenState" : "visibleState";}}
}
功能介绍:
  1. 定义了两个状态:
    • visibleState:矩形完全可见(opacity: 1)。
    • hiddenState:矩形完全隐藏(opacity: 0)。
  2. 通过鼠标点击,切换矩形的状态,显示或隐藏矩形。

示例 2:按钮的激活/非激活状态

接下来实现一个按钮,点击后改变其背景颜色和大小,表示它被激活或非激活。

import QtQuick
import QtQuick.ControlsRectangle {width: 300height: 200color: "white"Rectangle {id: buttonwidth: 100height: 50anchors.centerIn: parentcolor: "gray"radius: 10state: "inactive"states: [State {name: "inactive"PropertyChanges {target: buttoncolor: "gray"scale: 1}},State {name: "active"PropertyChanges {target: buttoncolor: "green"scale: 1.2}}]}MouseArea {anchors.fill: parentonClicked: {// 切换按钮的激活状态button.state = (button.state === "inactive") ? "active" : "inactive";}}
}
功能介绍:
  1. 定义了两个状态:
    • inactive:按钮为灰色且大小为正常比例。
    • active:按钮变为绿色,且略微放大。
  2. 鼠标点击后,按钮在两种状态间切换,直观地表现激活和非激活状态。

示例 3:面板的展开/折叠

实现一个面板,点击后可以在展开折叠状态之间切换。

import QtQuick
import QtQuick.ControlsRectangle {width: 300height: 200color: "lightblue"Rectangle {id: panelwidth: 200height: 50anchors.horizontalCenter: parent.horizontalCentercolor: "lightgray"state: "collapsed"states: [State {name: "collapsed"PropertyChanges {target: panelheight: 50}},State {name: "expanded"PropertyChanges {target: panelheight: 150}}]}Text {text: "Click to Toggle"anchors.horizontalCenter: panel.horizontalCenteranchors.verticalCenter: panel.verticalCenter}MouseArea {anchors.fill: parentonClicked: {// 切换面板状态panel.state = (panel.state === "collapsed") ? "expanded" : "collapsed";}}
}
功能介绍:
  1. 定义了两个状态:
    • collapsed:面板高度为 50 像素。
    • expanded:面板高度扩展到 150 像素。
  2. 鼠标点击后,面板在展开和折叠之间切换。

示例 4:灯泡的开/关

最后,我们用一个灯泡的示例来演示状态的视觉效果切换。

import QtQuick
import QtQuick.ControlsRectangle {width: 200height: 200color: "black"Rectangle {id: bulbwidth: 100height: 100anchors.centerIn: parentradius: 50color: "gray"state: "off"states: [State {name: "off"PropertyChanges { target: bulb; color: "gray" }},State {name: "on"PropertyChanges { target: bulb; color: "yellow" }}]}MouseArea {anchors.fill: parentonClicked: {// 切换灯泡状态bulb.state = (bulb.state === "off") ? "on" : "off";}}
}
功能介绍:
  1. off 状态:灯泡为灰色,表示关闭。
  2. on 状态:灯泡为黄色,表示点亮。
  3. 鼠标点击后,灯泡颜色会在灰色和黄色之间切换,模拟开关效果。

总结

在 QML 中,通过定义 State 和使用 PropertyChanges,可以轻松实现界面元素的动态效果。无论是可见性切换激活效果,还是更复杂的展开/折叠开关模拟,都可以通过状态来完成。这种方式不仅代码简洁,还让界面逻辑更加清晰和直观。

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

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

相关文章

C语言简单测试总结

前言 在学C语言之前回顾一下C中的一些知识.选用的是中国大学MOOC中C程序设计(面向对象进阶)中的C语言水平评估测试题. 题目 ​The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float题解:unsigned是无符号的意识,通常在…

frp(s) 内网穿透 Liunx环境双端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透、负载均衡和反向代理等多种场景。它能够将内网中的服务暴露给公网,实现远程访问。此外,FRP还可以用于接收类似GitHub或第三方提供的Webhook请求。在微服务架构中,FRP可以作为服务调用的反向代理,提…

代码随想录算法训练营第三十五天|01背包问题 二维和一维(卡码网第46题)、416分割等和子集

day35 动态规划part03 1. 01背包问题 二维 卡码网第46题 01 背包:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 动规五部…

【Unity3D】ECS入门学习(九)SystemBase

SystemBase:支持主线程或多线程执行筛选实体任务。 主要介绍是内部成员:Entities的各种筛选方法,其内部成员还有EntityManager ForEach方法筛选,传递一个有参委托函数进去,参数ref xxx组件类(可填多个&…

[Android]init中添加新的command

在Android的init进程中,command是用于定义启动时要执行的具体命令行指令的关键部分。init进程是Android系统启动的第一个进程,它负责初始化系统的各个组件,并启动必要的服务。command可以在init.rc文件及其包含的其他.rc文件中找到&#xff0…

STM32F103RCT6学习之五:ADC

1.ADC基础 ADC(Analog-Digital Converter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V&#xff…

strncpy函数和使用案例

strncpy 是 C 语言标准库函数之一,用于字符串操作。它的功能是将源字符串(source)中的字符复制到目标字符串(destination)中,但最多复制 n 个字符。如果源字符串的长度小于 n,则目标字符串剩余的…

实现类似gpt 打字效果

1. css的动画(animation) css中实现动画有两种方式:transition过渡动画、 animation自定义动画。 具体的可以看MDN链接:https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

微软远程桌面APP怎么用

微软远程桌面(Remote Desktop)客户端(RD Client)是一款由微软开发的应用程序,允许用户通过网络连接远程访问和控制另一台计算机。同时,微软远程桌面RD Client支持多种设备和操作系统,包括Window…

【每日学点鸿蒙知识】grid里面的item支持拖动问题、WebView回调问题、获取页面名称、弹幕效果实现、修改App输出路径 |

1、HarmonyOS grid里面的item支持拖动问题? 想要grid里面的item支持拖动,拖出来后可以删除,下面的代码就是你们上次给我提供的,正常情况下是可以使用的但是,往下拖的过程中遇到了TextInput后,gridItem的onDragMove就不会走了,我给TextInput设置了draggable(false)后…

SDK 指南

在前端开发中,SDK(Software Development Kit,软件开发工具包)是一个用于帮助开发者在特定平台、框架或技术栈中实现某些功能的工具集。 1. SDK 是什么? SDK 是一种开发工具包,它提供了开发人员实现某些功…

Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)

前言 Unity3d的UGUI系统与Web前端开发中常见的数据绑定和属性绑定机制有所不同。UGUI是一个相对简单和基础的UI系统,并不内置像Web前端(例如 Vue.js或React中)那样的双向数据绑定或自动更新UI的机制。UGUI是一种比较传统的 UI 系统&#xff…

OptimisticLock

想象你和你的朋友去了一家很受欢迎的餐厅。你们想要点一份特别的菜品——这家餐厅的招牌菜,但因为这道菜非常受欢迎,所以它的状态可能会随时变化(比如售罄或重新上架)。 传统方式(悲观锁) 通常情况下&…

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里,犹如一场精心编排的交响乐演奏,每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS(工作分解结构)、甘特图、关键路径法无疑是这场交响乐中的关键乐章,它们从不同维度为项目管…

TCP 和 UDP 的区别:解析网络传输协议

引言 在计算机网络的世界中,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种极为重要且应用广泛的传输层协议。它们在功能、特性以及适…

代码思想之快慢路径

处理业务代码的过程中,对业务代码有了一些调整,后续发现这是一种代码思想 在一段复杂的逻辑里,我把查询redis操作写在了前面, 业务逻辑: 如果需要不打压就退出本次处理 查询redis拿到商品需要打压的次数 如果次数 …

Java 溯本求源之基础(三十一)——泛型

目录 1. 泛型的定义与基本概念 2. 泛型的优势 3. 泛型的基本语法 3.1 泛型类 3.2 泛型方法 3.3 泛型接口 4. 泛型的边界 4.1 上限通配符(? extends T) 4.2 下限通配符(? super T) 5. 泛型的类型擦除 6. 泛型的使用场景…

纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效

纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了,今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现,包含闪烁的星星、随机彩灯等元素,非常适合节日气氛!…

Maven:Java项目构建与管理的利器

在Java开发领域,Maven无疑是一个举足轻重的工具。它不仅简化了项目的构建和依赖管理,还促进了团队协作和持续集成。本文将深入探讨Maven的核心功能、基本配置以及在实际项目中的应用。 Maven简介 Maven是Apache基金会下的一个开源项目,旨在…

【ES6复习笔记】Promise对象详解(12)

1. 什么是 Promise? Promise 是 JavaScript 中处理异步操作的一种机制,它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败,并提供了一种方式来处理操作的结果。 2. Promise 的基本语法 Promise 对象有三…