Qml学习——控件状态

news2025/6/8 7:09:36

最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。
学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p=1&vd_source=0b527ff208c63f0b1150450fd7023fd8
其他文章:
Qml学习——动态加载控件
Qml学习——控件状态
Qml学习——使用JavaScript
Qml学习——动画
Qml学习——鼠标事件处理MouseArea
Qml学习——布局
Qml学习——基本控件

目录

  • 1 控件状态
    • 1.1 State
    • 1.2 State的使用场景


1 控件状态

Qml的控件基类Item提供了states属性来存放用户的自定义状态,用户定义控件处于指定状态下时的属性,比如下例。

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

Window {
    visible: true; width: 200; height: 120

    Rectangle {
        id: rect
        anchors.fill: parent
        color: 'red'

        MouseArea {
            id: rectMouse
            anchors.fill: parent
        }
        
        states: State {
            when: rectMouse.pressed
            PropertyChanges {
                target: rect
                color: 'blue'
            }
        }
    }
}

请添加图片描述
定义了rect在被按压时,把颜色切换为蓝色。

1.1 State

State类的属性分别是:

名称类型描述
changeslist<Change>保存要应用于此状态的更改
extendstring状态继承,可以继承某一个State对象,以获取该状态的设置
namestring状态名称,可以通过设置控件的state属性为状态名,以触发对应状态。
whenbool当表达式为true时,切换到该状态。

下面是State的使用例程:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

Window {
    id: window
    visible: true; width: 200; height: 120

    Rectangle {
        id: rect; height: 50; width: 50
        color: 'red'

        MouseArea {
            id: rectMouse
            anchors.fill: parent
        }

        states: [
            State {
                name: 'change_window'
                PropertyChanges {
                    target: window
                    color: 'red'                //把窗口变红
                }
            },
            State {
                name: 'change_rect'
                extend: 'change_window'         //继承change_window,触发当前状态时,会把窗口变红色
                when: rectMouse.pressed
                PropertyChanges {
                    target: rect
                    color: 'white'              //把矩形变白
                }
            }
        ]
    }

    Button {
        anchors.bottom: parent.bottom
        text: 'name trigger'
        
        /* 用设置名称的方式触发状态切换 */
        onPressed: rect.state = 'change_rect'
        onReleased: rect.state = ''
    }
}

请添加图片描述

1.2 State的使用场景

b站视频教程上的例程,觉得挺不错,贴在这里记录一下。

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

Window {
    visible: true; width: 200; height: 120

    SwipeView {
        id: view
        anchors.top: parent.top
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right

        anchors.bottomMargin: 25

        Repeater {
            model: 3
            Rectangle {
                color: view.currentIndex == 0 ? 'red' : view.currentIndex == 1 ? 'yellow' : 'white'
                Text {
                    anchors.centerIn: parent
                    text: 'text' + view.currentIndex
                }
            }
        }
    }
    PageIndicator {
        anchors.bottom: view.bottom
        count: view.count
        currentIndex: view.currentIndex
    }

    Button {
        id: btn
        anchors.top: view.bottom
        anchors.bottom: parent.bottom
        anchors.horizontalCenter: parent.horizontalCenter

        states: [
            State {
                when: view.currentIndex === 0
                PropertyChanges {
                    target: btn
                    text: 'page0'
                    onClicked: console.log('000')
                }
            },
            State {
                when: view.currentIndex === 1
                PropertyChanges {
                    target: btn
                    text: 'page1'
                    onClicked: console.log('111')
                }
            },
            State {
                when: view.currentIndex === 2
                PropertyChanges {
                    target: btn
                    text: 'page2'
                    onClicked: console.log('222')
                }
            }
        ]
    }
}

请添加图片描述

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

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

相关文章

Apache安全加固配置教程(小白篇)

Apache安全加固配置教程(小白篇) 资源宝分享&#xff1a;www.httple.net 一&#xff0c;Apache服务器的介绍 Apache服务器它是Internet网上应用最为广泛的Web服务器软件之一。Apache服务器源自美国国家超级技术计算应用中心&#xff08;NCSA&#xff09;的 Web服务器项目中。目…

SAS应用入门学习笔记3

操作数据集的观测&#xff1a; Eg. 修改变量值等 变量的值取出来&#xff0c;那么我们需要对变量的值进行修改 weight height bmi? Missing 用到条件语if then、赋值语句、表达式 等。 表达式是操作数和操作符的序列。 例如&#xff1a;3 x x1 1、操作数&#xff1a;…

每日学术速递2.9

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV、cs.AI、cs.LG、cs.IR 1.Graph Signal Sampling for Inductive One-Bit Matrix Completion: a Closed-form Solution(ICLR 2023) 标题&#xff1a;归纳单比特矩阵完成的图信号采样&am…

程序员该不该在年后跳槽?3个问句给你答案

过完春节&#xff0c;2023年也迎来了第二个月份&#xff0c;有些程序员虽然还在公司上班&#xff0c;但是私底下跳槽的心蠢蠢欲动&#xff0c;简历说不定都改到第三版了。 在各大社交平台上&#xff0c;经常能看到不少程序员分享自己的跳槽经历&#xff0c;尤其是春节后更是如…

13薪|运营策划[北京市 - 海淀区]-10k-15k

"众推职聘”以交付结果为宗旨的全流程化招聘服务平台&#xff01;今日招聘信息↓【工作内容】1、根据项目要求&#xff0c;收集相关数据&#xff0c;策划撰写项目运营方案&#xff1b;2、运营合作环节中&#xff0c;监督管理执行&#xff1b;3、参与项目的评估&#xff1b…

WorkTool无障碍服务实现企业微信机器人接口

前言 想要实现一个企业微信机器人&#xff0c;如京东/拼多多福利群、美团瑞幸定时营销群、自助订单查询、智能咨询或社群管理机器人等&#xff0c;首先官方未提供外部群/客户群的机器人API&#xff0c;会话存档也只在一定场景下适用&#xff0c;及时使用会话存档也存在只能收不…

56 门控循环单元(GRU)【动手学深度学习v2】

56 门控循环单元&#xff08;GRU&#xff09;【动手学深度学习v2】 深度学习学习笔记 学习视频&#xff1a;https://www.bilibili.com/video/BV1mf4y157N2/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 门控循环单元GRU GRU和LSTM 实际上效果差不多。…

030_SSS_MaskSketch Unpaired Structure-guided Masked Image Generation

MaskSketch: Unpaired Structure-guided Masked Image Generation 1. Introduction 本文在MaskGIT的基础上进行了改进&#xff0c;提出了MaskSketch用于sketch-to-photo。MaskSketch直接使用预训练好的MaskGIT&#xff0c;不需要进行模型的训练&#xff0c;而且不需要成对的监…

29 - 面向对象的三大特征 - 多态

目录 一、理解多态 1、概念 2、使用场景 3、特点 二、多态案例1 1、需求 2、代码实现 一、理解多态 1、概念 不同的子类对象调用相同的父类方法&#xff0c;产生不同的执行结果2、使用场景 以继承和重写父类方法为前提是调用方法的技巧&#xff0c;不会影响到类的内部设计3、特…

Kubernetes那点事儿——健康检查

K8s应用程序生命周期管理——健康检查前言一、重启策略二、健康检查三、健康监控方式前言 官网&#xff1a;https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes 一、重启策略 Always&a…

云原生技术在容器方面的应用

随着近几年云原生生态的不断壮大&#xff0c;众多企业纷纷开展了用云上云的工作&#xff0c;学习和了解云原生及容器技术对于现代工程师是必不可少的&#xff0c;本文主要为大家介绍云原生及其在容器方面的应用。 1.1 什么是云原生 云原生技术有利于各组织在公有云、私有云和…

基于可视化 BI 工具 DataEase 制作第七次人口普查数据分析大屏

一、制作第七次人口普查数据大屏的背景介绍&#xff1a;第七次人口普查刚刚结束&#xff0c;想要制作一个大屏&#xff0c;能够直观的看到人口总数、出生人数、死亡人数等的情况&#xff1b;希望能够直观的看到人口分布的情况、各种比例、年龄结构等有一定的了解&#xff1b;直…

【网络原理篇2】TCP报头详解

在这一篇文章当中&#xff0c;了解到TCP是属于传输层的协议&#xff1b;当数据从应用层向传输层发送的时候&#xff0c;如果使用的是TCP协议&#xff0c;那么就需要把应用层的数据加上TCP报头。初识网络&#xff1a;IP、端口、网络协议、TCP-IP五层模型_革凡成圣211的博客-CSDN…

2023年去培训机构学前端还是Java?

选择专业肯定是优先考虑更有发展前景和钱途的专业。毕竟IT专业的培训费都不低&#xff0c;基本都要一两万左右&#xff0c;咱们花钱总是希望获得最大回报。 那么到底哪个更有发展前景呢&#xff1f; 零基础能学得会吗&#xff1f; 就业薪资如何呢&#xff1f; 前言 不知道大家有…

Python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符&#xff1a;运算符描述**指数 (最高优先级)~ -按位翻转, 一元加号和减号 (最后两个的方法名为 和 -)* / % //乘&#xff0c;除&#xff0c;取模和取整除 -加法减法>> <<右移&#xff0c;左移运算符&位 AND^ |位…

pyqt5:python读取二进制文件(音频PCM文件)显示波形

文章目录1.使用ffmpeg生成PCM文件1.1 用 ffprobe 查看文件信息1.2 用 ffmpeg 命令转换1.3 用ffplay 测试播放PCM文件2.python读取PCM文件显示波形2.1 函数numpy.fromfile2.2 数据类型dtype说明3.源码和PCM文件链接有个项目需要输出10-50Hz的低频信号驱动线圈&#xff0c;考虑使…

canal 使用详解

第1章 Canal 简介canal [kənl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费工作原理canal 模拟 MySQL slave 的交互协议&#xff0c;伪装自己为 MySQL slave &#xff0c;向 MySQL master 发送 d…

[架构之路-104]:《软件架构设计:程序员向架构师转型必备》-14-根据需求用例驱动进行软件架构的模块划分过程

14 用例驱动的模块划分过程描述用例的两种方式&#xff1a;图形描述&#xff1a;用例序列图&#xff0c;直观&#xff0c;但修改不方便&#xff0c;版本控制不方便。文本描述&#xff1a;用例规约描述&#xff0c;不直观&#xff0c;但修改方便&#xff0c;版本控制方便。14.1 …

轻松使用 Python 检测和识别车牌(附代码)

车牌检测与识别技术用途广泛&#xff0c;可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理&#xff0c;检测和识别车牌&#xff0c;最后显示车牌字符&#xff0c;作为…

AWS实战:Dynamodb到Redshift数据同步

AWS Dynamodb简介 Amazon DynamoDB 是一种完全托管式、无服务器的 NoSQL 键值数据库&#xff0c;旨在运行任何规模的高性能应用程序。DynamoDB能在任何规模下实现不到10毫秒级的一致响应&#xff0c;并且它的存储空间无限&#xff0c;可在任何规模提供可靠的性能。DynamoDB 提…