QML语法

文章目录

  • QML
  • 属性

QML

QML是一种描述用户界面的声明式语言。它将用户界面分解成一些更小的元素,这
些元素能够结合成一个组件。QML语言描述了用户界面元素的形状和行为。用户界
面能够使用JavaScript来提供修饰,或者增加更加复杂的逻辑。从这个角度来看它
遵循HTML-JavaScript模式,但QML是被设计用来描述用户界面的,而不是文本文
档。
从QML元素的层次结构来理解是最简单的学习方式。子元素从父元素上继承了坐标
系统,它的x,y坐标总是相对应于它的父元素坐标系统。

import QtQuick 2.0// 根元素是一个矩形
Rectangle {// 命名这个元素为rootid: root// <属性>:<value>width: 120height: 240// color propertycolor: "#D8D8D8"// 声明一个嵌套元素(父节点的孩子节点)Image {id: rocket// 引用父对象x: (parent.width - width)/2; y: 40source: 'assets/rocket.png'}// 根节点的另一个孩子节点Text {// un-named element// 通过id引用y: rocket.y + rocket.height + 20// 引用根元素width: root.widthhorizontalAlignment: Text.AlignHCentertext: 'Rocket'}
}

1.import声明导入了一个指定的模块版本。一般来说会导入QtQuick2.0来作为初
始元素的引用。
2.使用//可以单行注释,使用/**/可以多行注释,就像C/C++和JavaScript一样。
3.每一个QML文件都需要一个根元素,就像HTML一样。
4.一个元素使用它的类型声明,然后使用{}进行包含。
5.元素拥有属性,他们按照name:value的格式来赋值。
6.任何在QML文档中的元素都可以使用它们的id进行访问(id是一个任意的标识
符)。
7.元素可以嵌套,这意味着一个父元素可以拥有多个子元素。子元素可以通过访
问parent关键字来访问它们的父元素。
建议

你会经常使用id或者关键字parent来访问你的父对象。有一个比较好的方法是命名
你的根元素对象id为root(id:root),这样就不用去思考你的QML文档中的根元素 应该用什么方式命名了。

提示

你可以在你的操作系统命令行模式下使用QtQuick运行环境来运行这个例子,比如 像下面这样: $ Q T D I R / b i n / q m l s c e n e r e c t a n g l e . q m l 将 QTDIR/bin/qmlscene rectangle.qml 将 QTDIR/bin/qmlscenerectangle.qmlQTDIR替换为你的Qt的安装路径。qmlscene会执行Qt Quick运行环境初始化,
并且解释这个QML文件。 在Qt Creator中你可以打开对应的项目文件然后运行rectangle.qml文档

属性

元素使用他们的元素类型名进行声明,使用它们的属性或者创建自定义属性来定
义。一个属性对应一个值,例如 width:100,text: ‘Greeting’, color: ‘#FF0000’。一
个属性有一个类型定义并且需要一个初始值。

Text
{
// 标识符
id: thisLabel
// 设置xy的值
x: 24; y: 16
// 绑定高度是宽度的两倍
height: 2 * width
// 自定义属性
property int times: 24
// 属性别名
property alias anotherTimes: thisLabel.times
// 文本按值添加
text: "Greetings " + times
// 字体是一个分组属性
font.family: "Ubuntu"
font.pixelSize: 24
// KeyNavigation 是一个附加属性
KeyNavigation.tab: otherLabel
// 属性更改的信号处理进程 
onHeightChanged: console.log('height:', height)
// 接收键盘事件的焦点
focus: true
// 基于焦点值改变颜色
color: focus?"red":"black"
}
  1. id是一个非常特殊的属性值,它在一个QML文件中被用来引用元素。id不是一
    个字符串,而是一个标识符和QML语法的一部分。一个id在一个QML文档中是
    唯一的,并且不能被设置为其它值,也无法被查询
    (它的行为更像C++世界里
    的指针)。

  2. 一个属性能够设置一个值,这个值依赖于它的类型。如果没有对一个属性赋
    值,那么它将会被初始化为一个默认值。你可以查看特定的元素的文档来获得
    这些初始值的信息。

  3. 一个属性能够依赖一个或多个其它的属性,这种操作称作属性绑定。当它依赖
    的属性改变时,它的值也会更新。这就像订了一个协议,在这个例子中height
    始终是width的两倍。

  4. 添加自己定义的属性需要使用property修饰符,然后跟上类型,名字和可选择
    的初始化值(property : )。如果没有初始值将会给定一个系统初始值作为初
    始值。注意如果属性名与已定义的默认属性名不重复,使用default关键字你可
    以将一个属性定义为默认属性。这在你添加子元素时用得着,如果他们是可视
    化的元素,子元素会自动的添加默认属性的子类型链表(children property
    list)。

  5. 另一个重要的声明属性的方法是使用alias关键字(property alias : )。alias关
    键字允许我们转发一个属性或者转发一个属性对象自身到另一个作用域。我们
    将在后面定义组件导出内部属性或者引用根级元素id会使用到这个技术。一个
    属性别名不需要类型,它使用引用的属性类型或者对象类型。

  6. text属性依赖于自定义的timers(int整型数据类型)属性。int整型数据会自动
    的转换为string字符串类型数据。这样的表达方式本身也是另一种属性绑定的
    例子,文本结果会在times属性每次改变时刷新。

  7. 一些属性是按组分配的属性。当一个属性需要结构化并且相关的属性需要联系
    在一起时,我们可以这样使用它。另一个组属性的编码方式是 font{family:
    “UBuntu”; pixelSize: 24 }。

  8. 一些属性是元素自身的附加属性。这样做是为了全局的相关元素在应用程序中
    只出现一次(例如键盘输入)。编码方式.: 。

  9. 对于每个元素你都可以提供一个信号操作。这个操作在属性值改变时被调用。
    例如这里我们完成了当height(高度)改变时会使用控制台输出一个信息。

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

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

相关文章

Linux 系统图像化编程GTK入门

环境前期准备 演示环境&#xff1a;Windows 11 Ubuntu 22.04.4 VS Code 前提条件&#xff1a;1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面&#xff0c;如果没有安装请参考文章&#xff1a; windows11子系统Ubuntu 22.04.4子安装图形化界面 2、Ubuntu 22.04.4…

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行机器指令&#xff08;二进制指令&#xff09; 第2种是执行环境&#xff0c;它用于实际执行代码 2、翻译环境 那翻译环境是怎…

数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分&#xff0c;其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下&#xff0c;数据资产管理面临着前所…

通过文章id递归查询所有评论(xml)

<!-- 通过文章id递归查询所有评论 --> <select id"findByArticleId" resultMap"commentResultMap">SELECT * FROM mxg_comment WHERE parent_id -1AND article_id #{articleId}ORDER BY create_date DESC </select><!-- 将每…

【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

2024 端午节巽寮湾游玩记录

2024 端午节巽寮湾游玩记录 文章目录 2024 端午节巽寮湾游玩记录一、前言二、巽寮湾游玩行程1、三天衣食住行2、主要图片&#xff1a; 三、其他1、小结2、巽寮湾游玩建议3、感慨 一、前言 时间总是过得很快&#xff0c;只要你活着时间就会不停往前走。 所以你以后的路其实都是…

外卖APP开发详解:从同城O2O系统源码开始

近期&#xff0c;从事软件开发的小伙伴们都在讨论外卖APP&#xff0c;热度非常之高&#xff0c;所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求&#xff0c;分析竞争对手的优劣势&#xff0c;明确自身的市场定位。…

如何在Vue3中处理异步API调用并更新表单数据(附Demo)

目录 前言1. 问题所示2. 知识分析3. 实战 前言 从实战问题中剖析知识点 1. 问题所示 执行Vue3数据的时候&#xff0c;终端输出的data如下所示 Promise {<pending>} [[Prototype]] : Promise [[PromiseState]] : "fulfilled" [[PromiseResult]] : Array(…

Paddleocr数据增强调用逻辑

数据增强调用逻辑 以在ppocr/data/simple_dataset.py为例&#xff1a; get_ext_data通过self.ops[:self.ext_op_transform_idx]获取配置文件中数据增强 self.ops在def __init__(self, config, mode, logger, seedNone):中通过解析配置文件中transforms内容获取数据增强操作&a…

ADB->获取当前正在显示的Fragment和Activity的ADB命令

获取当前显示的Activity adb shell "dumpsys window | grep mCurrentFocus"指令拆解adb shell&#xff1a;启动一个远程shell来运行设备上的命令dumpsys window&#xff1a;获取当前窗口管理器的信息|&#xff1a;将前一个命令的输出作为后一个命令的输入grep mCurr…

【Unity拖拽物体】实现对点中的3D物体进行拖拽的功能

场景结构&#xff0c;两个普通模型 第一种 脚本所挂载的物体才可以被拖拽 【PC鼠标版本】 using UnityEngine;// 这个脚本实现了&#xff0c;本脚本所在的游戏物体能够被拖拽 public class DragObjectT : MonoBehaviour {private Vector3 screenPoint; // 存储物体在屏幕上的位…

python GUI开发: tkinter菜单创建,记事本和画图软件综合项目的实战演练

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【0287】Postgres内核在pg_internal.init不存在情况下的relcache cache初始化实现

上一篇: 【0264】深入分析relcache(relation descriptor cache)缓存初始化第2阶段(2) 0. 前言 在用户未CREATE DATABASE 情况(即initdb创建了Postgres数据库集簇,或有过psql登录数据库动作)下,PGDATA/global目录下是还不存在pg_internal.init文件的,因此,启动Post…

elasticsearch安装(centos7)

先给出网址 elasticsearch&#xff1a;Download Elasticsearch | Elastic elasticKibana&#xff1a;Download Kibana Free | Get Started Now | Elastic Logstash&#xff1a;Download Logstash Free | Get Started Now | Elastic ik分词&#xff1a;Releases infinilabs/…

百度智能云推出智能运维工具,云助手让云服务器运维更简单

为了提升云服务器执行命令的效率&#xff0c;百度智能云发布了 SmartTerm 远程连接终端。不止于此&#xff0c;为了更加极致地提升运维效率&#xff0c;我们又推出了「云助手」这款轻量快捷的运维工具。 ​ 只有做过云服务器运维的人才知道管理上万台云服务器有多崩溃。在海量…

Ruby 数据库访问 - DBI 教程

Ruby 数据库访问 - DBI 教程 本文将详细介绍如何使用 Ruby 的 DBI(Database Interface)库来访问和操作数据库。DBI 是 Ruby 语言中一个常用的数据库接口库,它提供了一套统一的接口来访问不同的数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过本文的学习,您将掌握如何使…

了解振弦采集仪在建筑物安全监测中的应用与研究

了解振弦采集仪在建筑物安全监测中的应用与研究 摘要&#xff1a;河北稳控科技振弦采集仪是一种常用的结构物安全监测设备&#xff0c;广泛应用于建筑物、桥梁、塔楼等工程结构的监测。本文将从振弦采集仪的原理、应用案例和研究进展等方面进行详细介绍&#xff0c;以便更好地…

解决python从TD数据库取50w以上大量数据慢的问题

1.问题背景描述 python项目中的时序数据都存放在TD数据库中&#xff0c;数据是秒级存入的&#xff0c;当查询一周数据时将超过50w数据量&#xff0c;这是一次性获取全量数据到python程序很慢&#xff0c;全流程10秒以上&#xff0c;希望进行优化加速 2.排查 首先&#xff0c…

vue中使用发布订阅的方式进行vue组件之间的通信

全部实现代码如下&#xff1a; header.vue组件的相关代码 Search GitHub Users <input type“button” value“Search” class“btn btn-primary” placeholder“请输入 github 用户名” click“search”> main组件的相关代码 请输入搜索用户的名称 loading {{error…

springboot3 基础特性(1)

文章目录 一、SpringApplication三种方式1.1 基础方式1.2.自定义 SpringApplication1.3、FluentBuilder API 二、自定义Banner三、Profiles3.1 什么是 Profiles &#xff1f;3.2 声明Profiles3.3 激活配置文件3.3.1 分组3.3.2 环境包含3.3.3 激活方式3.3.4 配置优先级 一、Spri…