【QML之·基础语法概述】

系列文章目录


文章目录

  • 前言
  • 一、QML基础语法
  • 二、属性
  • 三、脚本
  • 四、核心元素类型
    • 4.1 元素可以分为视觉元素和非视觉元素。
    • 4.2 Item
      • 4.2.1 几何属性(Geometry):
      • 4.2.2 布局处理:
      • 4.2.3 键处理:
      • 4.2.4 变换
      • 4.2.5 视觉
      • 4.2.6 状态定义
    • 4.3 Rectangle
      • 4.3.1 颜色
    • 4.4 Text
    • 4.5 Image
    • 4.6 MouseArea
  • 五、实例演示
  • 总结


前言

  • QML是一种用于描述对象如何相互关联的声明式语言。
  • QtQuick是一个基于QML的框架。

一、QML基础语法

  • import语句导入一个模块。qt6 可以不写版本号,自动加载最高版本的模块。
  • 对于单行注释,可以使用//,对于多行注释,可以通过/**/进行注释。就像在C/C++和JavaScript中一样
  • 每个QML文件都需要有一个唯一的根元素,就像HTML一样
  • 元素声明形式为:type{ }
  • 元素可以有属性,形式为:name:value
  • QML文档中的任意元素可以通过使用其id(不带引号的标识符)进行访问
  • 元素可以嵌套,这意味着父元素可以有千元去子元素可以使用parent关键字访问父元素

二、属性

  • 属性是一个简单的键值对,例如:width:100; text: ‘Greetings’ ; color: ‘#FF0000’
  • 属性具有类型,并且可以具有初始值。
  1. id是用于引用QML文件(在QML中称为"document”)中的元素。id在文档中必须是唯一的,不能重置为其他值。(类似于C++的引用。)
  2. 属性可以设置值,具体取决于其类型。如果没有为属性指定值,将使用默认初始值。
  3. 属性可以依赖于一个或多个其他属性。这称为绑定
  4. 可以使用property限定符向元素添加新属性,后跟类型、名称和可选的初始值( property<类型><名称>:<值>) 。
  5. 声明属性的另一种重要方式是使用别名关键字(property alias≤名称>:<引用>)。
  6. 基于int的值将自动转换为字符串类型。每次times属性更改时都会更新文本。
  7. 编写grouped property的另一种方法是font{family:“Ubuntu”; pixelSize:24}。
  8. 快速切换焦点。
  9. 可以为属性提供处理程序。属性更改后被调用。

三、脚本

  • QML和JavaScript(也称为ECMAScript)是好朋友。
  1. 也可以使用箭头函数((text)=> {})。
  2. 当用户按下了键盘上的空格键,调用JavaScript函数increment() 。
  3. 以函数name(){ …}的形式定义JavaScript函数,它增加了计数器。每次SpacePress递增时,绑定属性也将更新。

四、核心元素类型

4.1 元素可以分为视觉元素和非视觉元素。

  • 视觉元素(如Rectangle)具有几何形状。
  • 非视觉元素(Timer)提供一般功能,通常用于控制视觉元素。

4.2 Item

ltem是所有视觉元素的基础元素,因此所有其他视觉元素都从ltem继承。 它本身
并不绘制任何东西,但定义了所有视觉元素的共同属性:

4.2.1 几何属性(Geometry):

  • x、y: 用于定义元素展开的左上角位置
  • z: 用于定义堆叠顺序
  • width、height: 用于表示范围

4.2.2 布局处理:

  • anchors:(左、右、上、下、垂直和水平中心)相对于其他元素进行定位。
    • 可选项margins

4.2.3 键处理:

  • KeyKeyNavigation属性用于控制键处理
  • focus属性启用键处理

4.2.4 变换

  • scalerotate变换以及x、y、z变换的通用transform属性列表,以及transformOrigin。

4.2.5 视觉

  • opacity用于控制透明度,visible用于显示/隐藏元素,clip用于限制对元素边界的绘制操作,smooth用于增强渲染质量。

4.2.6 状态定义

  • states用于动画化状态更改。
    • 包含所有支持的状态列表,当前state属性和transitions 列表属性,

4.3 Rectangle

Rectangle扩展了Item,为其添加填充颜色。此外,还支持border.colorborder.width。要创建圆角矩形,可以使用radius属性。

4.3.1 颜色

  • gradient用于填充渐变颜色
    • position标记y轴上的位置(o=顶部,1=底部)

4.4 Text

  • 要显示文本,可以使用Text元素。它最显著的属性是字符串类型的text属性。元素根据给定的文本和使用的字体(例如font.family、font.pixelSize等)计算其初始宽度和高度。要更改文本的颜色,只需使用color属性。
  • 可以使用horizontalAlignmentverticalAlignment属性对齐文本。使用stylestyleColor允许以轮廓、凸起和凹陷模式渲染文本。
  • elide属性允许将省略符位置设置为文本的左侧、右侧或中间。
  • 例如:A very … long text
  • 如果不希望省略符模式的"…"出现,但仍希望看到全文,可以使用wrapMode属性包装文本(仅在显式的设置了宽度时有效)

4.5 Image

lmage元素能够以各种格式(例如PNG、JPG、GIF、BMP、WEBP)显示图像。有关支持的图像格式的完整列表,请参阅Qt文档。除了提供图像URL的source属性外,它还包含一个控制大小调整行为的fillMode

说明
lmage.Stretch默认值。缩放图像以适合项目
Image.PreserveAspectFit图像均匀缩放以适应而不裁剪
Image.PreserveAspectCrop图像均匀缩放以填充,必要时进行裁剪
Image.Tile水平和垂直复制图像
lmage.TileVertically图像水平拉伸并垂直平铺
lmage.TileHorizontally图像被垂直拉伸并水平平铺Image.Pad:图像未转换
  • 使用PreserveApectCrop的图像元素还应启用clip,以避免在图像边界之外渲染图像数据。
  • 可以在C++中使用QQuicklmageProviger创建自己的图像提供程序。动态创建图像,并利用线程加载图像。

4.6 MouseArea

MouseArea这是一个矩形的不可见项,可以在其中捕获鼠标事件。

五、实例演示

示例1:

import QtQuick 2.12
import QtQuick.Window 2.12Rectangle {id: rootwidth: 640; height: 480color: "#4A4A4A"Image {id: imagex: (/*root.*/parent.width - width) / 2;y: (root.height - height) / 2source: "../00_chapter1-pinwheel/images/pinwheel.png"}Text {
//        id: nametext: qsTr("大风车傻乎乎的转!")/*x: (root.width - width) / 2;*/y: image.y + image.height + 20horizontalAlignment: Text.AlignHCenterwidth: root.widthcolor: 'white'}
}

运行结果:
在这里插入图片描述
示例2:

import QtQuick 2.9
import QtQuick.Window 2.3Rectangle{id: rootwidth: 800;height: 800Text {// (1) identifierid: lable1// (2) set x- and y-positonx: 20;y: 20// (3) bind height to 2 * widthheight: 2 * widthRectangle {anchors.fill: parentcolor: 'yellow'z: parent.z - 1}// (4) custom propertyproperty int times: 24// (5) property aliasproperty alias anotherTimes: lable1.times// (6) set text appended by valuetext: "lable1 " + anotherTimes// (7) font is a grouped properttfont.family: "Ubuntu"font.pixelSize: 80
//        font {family: "Ubuntu";pixelSize: 24}// (8) KeyNavigation is an attached propertyKeyNavigation.tab: lable2// (9) signal handler for property changesonHeightChanged: console.log('height:',height)// (10) focus is need to receive key eventsfocus: true// (11) change color based on focus valuecolor: focus ? "green":"red"}Text {id: lable2x: lable1.x;y: lable1.y +300font{pixelSize: 80}text: qsTr("lable2")focus: !lable1.focusKeyNavigation.tab: lable1color: focus ? "green":"red"}
}

运行结果:
在这里插入图片描述
示例3:

import QtQuick 2.9
import QtQuick.Window 2.3Rectangle{id: rootwidth: 800;height: 800Text {id: lable1color: whitex: 200;y: 200property int spacePresses: 0text: "lable1 " + spacePresses + " times"font.family: "Ubuntu"font.pixelSize: 50onTextChanged: function(text){ console.log("text changed to:",text)}
//        onTextChanged: (text) =>{console.log("text changed to:",text)}focus: trueKeys.onSpacePressed: {increment()}Keys.onEscapePressed: {lable1.text = ''}function increment(){spacePresses += 1}KeyNavigation.tab: lable1}
}

运行结果:
在这里插入图片描述
示例4:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 640height: 480title: qsTr("Rect")Rectangle {id: rect1x: 20;y: 20width: 100; height: 100color: 'lightsteelblue'}Rectangle {id: rect2x: 140;y: 20width: 100; height: 100border.color: 'lightsteelblue'border.width: 4radius: 20}Rectangle {id: rect3x: 260;y: 20width: 100; height: 100gradient: Gradient {
//            GradientStop {position: 0.0;color: 'lightsteelblue'}
//            GradientStop {position: 1.0;color: 'slategray'}GradientStop {position: 0.0;color: 'green'}GradientStop {position: 1.0;color: 'red'}}border.color: 'lightsteelblue'border.width: 4radius: 20}Rectangle {id: rect4x: 20;y: 140width: 100; height: 100//可以使用JavaScript创建随机颜色color: Qt.rgba(Math.random(),Math.random(),Math.random(),1)}
} 

运行结果:
在这里插入图片描述

示例5:

Window {visible: truewidth: 640height: 780title: qsTr("Hello World")Text {id: text1text: "明天你好!"color: "#303030"font.family: "Ubuntu"font.pixelSize: 30}Text {y: text1.height+50width: 180elide: Text.ElideMiddle //文字缩略显示属性设置text: "今天你过的好吗???????????"font.family: "Ubuntu"font.pixelSize: 80style: Text.SunkenstyleColor: '#000000'color: 'white'
//        wrapMode: Text.WordWrap //文字超过设置宽度换行(符号不属于文字范畴)wrapMode: Text.WrapAtWordBoundaryOrAnywhere //符号也会换行}
}

运行结果:
在这里插入图片描述

在这里插入图片描述
示例6:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 800height: 600title: qsTr("Image")Image {id: image1width: 300; height: 300source: "./image/triangle.png"}Image {
//        id: image1x: image1.x + image1.width + 20width: image1.width / 2; height: 300source: "./image/triangle.png"
//        fillMode: Image.Stretch             //默认值。缩放图像以适合项目
//        fillMode: Image.PreserveAspectCrop  //图像均匀缩放以填充,必要时进行裁剪
//        clip: truefillMode: Image.PreserveAspectFit     //图像均匀缩放以适应而不裁剪(长宽哪个小,以哪个为基准)}
}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例7:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 800height: 700title: qsTr("MouseArea")Rectangle {id: rect1x: 10;y: 10width: 280;height: 280color: "lightsteelblue"MouseArea{width: parent.width; height: parent.heightonClicked: rect2.visible = !rect2.visible}}Rectangle {id: rect2x: 300;y: 10width: 280;height: 280border.color: "lightsteelblue"border.width: 5}
}

运行结果:
在这里插入图片描述


总结

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

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

相关文章

《植物大战僵尸杂交版》2.2版本:全新内容与下载指南

《植物大战僵尸杂交版》2.2版本已经火热更新&#xff0c;带来了一系列令人兴奋的新玩法和调整&#xff0c;为这款经典的塔防游戏注入了新的活力。如果你是《植物大战僵尸》系列的忠实粉丝&#xff0c;那么这个版本绝对值得你一探究竟。 2.2版本更新亮点 新增看星星玩法 这个新…

宏碁F5-572G-59K3笔记本笔记本电脑拆机清灰教程(详解)

1. 前言 我的笔记本开机比较慢&#xff0c;没有固态&#xff0c;听说最近固态比较便宜&#xff0c;就想入手一个&#xff0c;于是拆笔记本看一下有没有可以安的装位置。&#xff08;友情提示&#xff0c;在拆机之前记得洗手并擦干&#xff0c;以防静电损坏电源器件&#xff09…

ChatTTS使用

ChatTTS是一款适用于日常对话的生成式语音模型。 克隆仓库 git clone https://github.com/2noise/ChatTTS cd ChatTTS 使用 conda 安装 conda create -n chattts conda activate chattts pip install -r requirements.txt 安装完成后运行 下载模型并运行 python exampl…

Python酷库之旅-第三方库Pandas(013)

目录 一、用法精讲 31、pandas.read_feather函数 31-1、语法 31-2、参数 31-3、功能 31-4、返回值 31-5、说明 31-6、用法 31-6-1、数据准备 31-6-2、代码示例 31-6-3、结果输出 32、pandas.DataFrame.to_feather函数 32-1、语法 32-2、参数 32-3、功能 32-4、…

【计算机毕业设计】基于Springboot的IT技术交流和分享平台【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算&#xff0c;基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

MATLAB备赛资源库(1)建模指令

一、介绍 MATLAB&#xff08;Matrix Laboratory&#xff09;是一种强大的数值计算环境和编程语言&#xff0c;特别设计用于科学计算、数据分析和工程应用。 二、使用 数学建模使用MATLAB通常涉及以下几个方面&#xff1a; 1. **数据处理与预处理**&#xff1a; - 导入和处理…

MacOS如何切换shell类型

切换 shell 类型 如果你想在不同的 shell 之间切换&#xff0c;以探索它们的不同之处&#xff0c;或者因为你知道自己需要其中的一个或另一个&#xff0c;可以使用如下命令&#xff1a; 切换到 bash chsh -s $(which bash)切换到 zsh chsh -s $(which zsh)$()语法的作用是运…

VSCode无法连接网络安装插件-手动安装插件

手动安装插件&#xff1a; 你可以尝试从 Visual Studio Code Marketplace 下载 .vsix 文件&#xff0c;然后在VSCode中手动安装。 手动安装的步骤如下&#xff1a; 1.访问插件页面&#xff0c;下载 .vsix 文件。 Extensions for Visual Studio family of products | Visual S…

CSS【详解】层叠 z-index (含 z-index 的层叠规则,不同样式的层叠效果)

仅对已定位的元素&#xff08; position:relative&#xff0c;position:absolute&#xff0c;position:fixed &#xff09;有效&#xff0c;默认值为0&#xff0c;可以为负值。 z-index 的层叠规则 z-index 值从小到大层叠 兄弟元素 z-index 值相同时&#xff0c;后面的元素在…

MySQL架构你了解多少?

MySQL是一个服务器-客户端应用&#xff0c;MySQL8.0服务器是由连接池、服务管理工具和公共组件、NoSQL接口、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。MySQL还为各种编程语言提供了一套用于外部程序访问服务器的连接器。整体架构图如下所示: MySQLConnectors:为…

文件操作和IO流(Java版)

前言 我们无时无刻不在操作文件。可以说&#xff0c;我们在电脑上能看到的图片、视频、音频、文档都是一个又一个的文件&#xff0c;我们需要从文件中读取我们需要的数据&#xff0c;将数据运算后也需要将结果写入文件中长期保存。可见文件的重要性&#xff0c;今天我们就来简…

windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK

文章目录 Loki下载Grafana下载安装Loki添加Loki数据源springboot日志推送 Loki下载 下载地址&#xff1a;https://github.com/grafana/loki/releases/ 找到loki-windows-amd64.exe.zip点击开始下载&#xff0c;我这里下载的2.9.9版本 Grafana下载 下载地址&#xff1a;http…

Hi3861 OpenHarmony嵌入式应用入门--MQTT

MQTT 是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输 协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用&#xff0c;是专为受限设备和低带宽、 高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器…

“Numpy数据分析与挖掘:高效学习重点技能“

目录 # 开篇 # 补充 zeros & ones eye 1. numpy数组的创建 1.1 array 1.2 range 1.3 arange 1.4 常见的数据类型 1.5 astype 1.6 random.random() & round 2. numpy数组计算和数组计算 2.1 reshape 2.2 shape 2.3 将一维数组变成多维数组 2.4 指定一维…

Java版Flink使用指南——合流

大纲 新建工程无界流奇数Long型无界流偶数Long型无界流奇数String型无界流 合流UnionConnect 测试工程代码 在《Java版Flink使用指南——分流导出》中&#xff0c;我们通过addSink进行了输出分流。本文我们将介绍几种通过多个无界流输入合并成一个流来进行处理的方案。 新建工…

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令&#xff0c;find 查找某个目录&#xff0c;但是不包括这个目录本身&#xff1f; Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…

算法小练之 位运算基础

前言 今天正式走入&#xff0c;位运算这个章节&#xff0c;关于这一部分我会先介绍几个重要的知识点&#xff0c;然后再根据几个力扣上的题来讲解。 了解6种位操作 总所周知&#xff0c;变量在计算机中都是二进制存储的&#xff0c;比如一个变量int a 1&#xff1b; 它的存…

申请商标用什么颜色:企业和个人申请注册商标攻略!

在申请注册商标到底要用什么颜色&#xff0c;许多初次申请注册主体都不是特别清楚&#xff0c;普推知产商标老杨建议&#xff0c;在一般情况下建议尽量用黑白色&#xff0c;因为商标用黑白色在使用时可以着任何色。 在用黑色申请注册成功&#xff0c;别的主体用其它颜色要在同…

飞腾平台虚拟机组播性能调优指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…