【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.12

Rectangle {
    id: root
    width: 640; height: 480
    color: "#4A4A4A"

    Image {
        id: image
        x: (/*root.*/parent.width - width) / 2;y: (root.height - height) / 2
        source: "../00_chapter1-pinwheel/images/pinwheel.png"
    }

    Text {
//        id: name
        text: qsTr("大风车傻乎乎的转!")
        /*x: (root.width - width) / 2;*/y: image.y + image.height + 20
        horizontalAlignment: Text.AlignHCenter
        width: root.width
        color: 'white'
    }
}

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

import QtQuick 2.9
import QtQuick.Window 2.3

Rectangle{
    id: root
    width: 800;height: 800

    Text {
        // (1) identifier
        id: lable1

        // (2) set x- and y-positon
        x: 20;y: 20

        // (3) bind height to 2 * width
        height: 2 * width
        Rectangle {
            anchors.fill: parent
            color: 'yellow'
            z: parent.z - 1
        }

        // (4) custom property
        property int times: 24

        // (5) property alias
        property alias anotherTimes: lable1.times

        // (6) set text appended by value
        text: "lable1 " + anotherTimes

        // (7) font is a grouped propertt
        font.family: "Ubuntu"
        font.pixelSize: 80
//        font {family: "Ubuntu";pixelSize: 24}

        // (8) KeyNavigation is an attached property
        KeyNavigation.tab: lable2

        // (9) signal handler for property changes
        onHeightChanged: console.log('height:',height)

        // (10) focus is need to receive key events
        focus: true

        // (11) change color based on focus value
        color: focus ? "green":"red"
    }

    Text {
        id: lable2
        x: lable1.x;y: lable1.y +300
        font{pixelSize: 80}
        text: qsTr("lable2")
        focus: !lable1.focus
        KeyNavigation.tab: lable1
        color: focus ? "green":"red"
    }
}

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

import QtQuick 2.9
import QtQuick.Window 2.3

Rectangle{
    id: root
    width: 800;height: 800


    Text {
        id: lable1
        color: white
        x: 200;y: 200



        property int spacePresses: 0

        text: "lable1 " + spacePresses + " times"
        font.family: "Ubuntu"
        font.pixelSize: 50

        onTextChanged: function(text){ console.log("text changed to:",text)}
//        onTextChanged: (text) =>{console.log("text changed to:",text)}

        focus: true

        Keys.onSpacePressed: {increment()}

        Keys.onEscapePressed: {lable1.text = ''}

        function increment(){
            spacePresses += 1
        }

        KeyNavigation.tab: lable1

    }
}

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

import QtQuick 2.9
import QtQuick.Window 2.3

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Rect")

    Rectangle {
        id: rect1
        x: 20;y: 20
        width: 100; height: 100
        color: 'lightsteelblue'
    }

    Rectangle {
        id: rect2
        x: 140;y: 20
        width: 100; height: 100
        border.color: 'lightsteelblue'
        border.width: 4
        radius: 20
    }

    Rectangle {
        id: rect3
        x: 260;y: 20
        width: 100; height: 100
        gradient: 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: 4
        radius: 20
    }

    Rectangle {
        id: rect4
        x: 20;y: 140
        width: 100; height: 100
        //可以使用JavaScript创建随机颜色
        color: Qt.rgba(Math.random(),Math.random(),Math.random(),1)
    }
} 

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

示例5:

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

    Text {
        id: text1
        text: "明天你好!"
        color: "#303030"
        font.family: "Ubuntu"
        font.pixelSize: 30
    }

    Text {
        y: text1.height+50
        width: 180
        elide: Text.ElideMiddle //文字缩略显示属性设置
        text: "今天你过的好吗???????????"
        font.family: "Ubuntu"
        font.pixelSize: 80

        style: Text.Sunken
        styleColor: '#000000'

        color: 'white'
//        wrapMode: Text.WordWrap //文字超过设置宽度换行(符号不属于文字范畴)
        wrapMode: Text.WrapAtWordBoundaryOrAnywhere //符号也会换行
    }
}

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

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

import QtQuick 2.9
import QtQuick.Window 2.3

Window {
    visible: true
    width: 800
    height: 600
    title: qsTr("Image")

    Image {
        id: image1
        width: 300; height: 300
        source: "./image/triangle.png"
    }

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

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

import QtQuick 2.9
import QtQuick.Window 2.3

Window {
    visible: true
    width: 800
    height: 700
    title: qsTr("MouseArea")

    Rectangle {
        id: rect1
        x: 10;y: 10
        width: 280;height: 280
        color: "lightsteelblue"

        MouseArea{
            width: parent.width; height: parent.height

            onClicked: rect2.visible = !rect2.visible
        }
    }

    Rectangle {
        id: rect2
        x: 300;y: 10
        width: 280;height: 280
        border.color: "lightsteelblue"
        border.width: 5
    }
}

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


总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统化学习 H264视频编码(01)基础概念

说明&#xff1a;我们参考黄金圈学习法&#xff08;什么是黄金圈法则?->模型 黄金圈法则&#xff0c;本文使用&#xff1a;why-what&#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法&#xff0c;理论方面会更多地讲清楚 音视频中概念的…

基于java+springboot+vue实现的校园二手书交易平台(文末源码+Lw)287

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自…

【hive】数据采样

参考https://hadoopsters.com/how-random-sampling-in-hive-works-and-how-to-use-it-7cdb975aa8e2&#xff0c;可以直接查看原文&#xff0c;下面只是对原文进行概括和实际性能测试。 1.distribute by sort by2.测试3.map端数据过滤优化采样 在说数据采样之前&#xff0c;需要…

03_Shell变量

【Shell】03_Shell变量 一、环境变量 Linux系统配置文件&#xff08;全局配置文件和用户个人配置文件&#xff09;中定义的变量&#xff0c;提供给所有Shell程序使用 1.1、全局环境变量 1.1.1、配置文件位置 /etc/environment /etc/bashrc&#xff08;或者/etc/bash.bashrc…

PTA - sdut-使用函数求a+aa+aaa++⋯+aa.....aaa(n个a)之和

题目描述&#xff1a; 给定两个均不超过9的正整数a和n&#xff0c;要求&#xff1a;编写函数fn(a,n)&#xff0c; 求aaaaaa⋯aa⋯aa(n个a&#xff09;之和&#xff0c;fn须返回的是数列之和。 函数接口定义&#xff1a; def fn(a,n):其中&#xff0c; a 和 n 都是传入的参数…

IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)

1. IEC 62056标准体系 IEC 62056标准体系目前共包括六部分&#xff0c;见图1&#xff1a; 第61部分&#xff1a;对象标识系统第62部分&#xff1a;接口类第53部分&#xff1a;COSEM应用层第46部分&#xff1a;使用HDLC&#xff08;High Level Data Link Control&#xff09;协…

39 线程库

目录 thread类的简单介绍线程函数参数锁线程交替打印原子性操作库无锁CAS智能指针的线程安全单例模式的线程安全 1. thread类的简单介绍 在c11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;如windows和linux下各有自己的接口&#xff0c;这使得…

【STM32/HAL】嵌入式课程设计:简单的温室环境监测系统|DS18B20 、DHT11

前言 板子上的外设有限&#xff0c;加上想法也很局限&#xff0c;就用几个传感器实现了非常简单的监测&#xff0c;显示和效应也没用太复杂的效果。虽说很简单&#xff0c;但传感器驱动还是琢磨了不久&#xff0c;加上串口线坏了&#xff0c;调试了半天才发现不是代码错了而是…

多标签问题

一、多标签问题与单标签问题的区别&#xff1a; 多标签问题是单标签问题的推广。 举个例子&#xff0c;同时识别图片中的小汽车&#xff0c;公交车&#xff0c;行人时&#xff0c;标签值有三个&#xff1a;小汽车&#xff0c;公交车&#xff0c;行人。 单标签问题仅对一个标签…

网络安全——防御实验

防御实验一 拓扑结构展示&#xff1a; 一、 根据题目&#xff0c;先为办公区做安全策略主要策略有以下几点&#xff1a; 1、书写名称和描述&#xff0c;名称和描述要明确&#xff0c;让除本人以外的人也能理解 2、确定源地址为办公区&#xff0c;目标地址为DMZ区 3、确定时间…

utf8mb4和utf8的不同、若依框架,代码生成器,gitee,前端vue的下载、修复和启动(寻求大佬帮助若依框架三、2.3)

2024.7.9 一、数据库的排序和统一问题。utf8mb4和utf8的不同1.1 发现问题1.2 解决问题-在idea中用sql生成器&#xff0c;生成sql语句&#xff0c;然后在里面修改1.3 utf8和utf8mb4的区别 二、若依前后端框架。代码生成器&#xff08;还没研究懂&#xff0c;但有三个方案&#x…

2024前端面试真题【JS篇】

DOM DOM&#xff1a;文本对象模型&#xff0c;是HTML和XML文档的编程接口。提供了对文档的结构化的表述&#xff0c;并定义可一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构、样式和内容。 DOM操作 创建节点&#xff1a;document.createElement()、do…

ER模型理论和三范式

ER模型理论和三范式 各种关系多对一一对一一对多多对多 三范式理论函数依赖完全函数依赖部分函数依赖传递&#xff08;间接&#xff09;函数依赖 第一范式&#xff1a;属性&#xff08;表字段&#xff09;不可切割第二范式&#xff1a;不能存在 部分函数依赖(都存在完全函数依赖…

最全windows提权总结(建议收藏)

当以低权用户进去一个陌生的windows机器后&#xff0c;无论是提权还是后续做什么&#xff0c;第一步肯定要尽可能的搜集信息。知己知彼&#xff0c;才百战不殆。 常规信息搜集 systeminfo 查询系统信息hostname 主机名net user 查看用户信息netstat -ano|find "3389&quo…

充电宝哪个牌子公认质量好?哪家充电宝好用?4款口碑好充电宝

在如今这个电子设备不离手的时代&#xff0c;充电宝成为了我们生活中的必备品。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;选择一款质量可靠、性能出色的充电宝并非易事。大家都在问&#xff1a;充电宝哪个牌子公认质量好&#xff1f;哪家充电宝好用&a…

【鸿蒙学习笔记】UIAbility组件概述

官方文档&#xff1a;UIAbility组件 目录标题 UIAbility组件概述 [Q&A] 什么是UIAbility&#xff1f;声明周期UIAbility组件-启动模式UIAbility组件-与UI的数据同步 UIAbility组件概述 [Q&A] 什么是UIAbility&#xff1f; UIAbility组件是一种包含UI界面的应用组件&a…

红酒知识百科:从入门到精通

红酒&#xff0c;这个深邃而迷人的世界&#xff0c;充满了无尽的知识与奥秘。从葡萄的选择、酿造工艺&#xff0c;到品鉴技巧&#xff0c;每一步都蕴藏着深厚的文化底蕴和精细的技艺。今天&#xff0c;就让我们一起踏上这场红酒知识之旅&#xff0c;从入门开始&#xff0c;逐步…

量产工具一一UI系统(四)

目录 前言 一、按钮数据结构抽象 1.ui.h 二、按键处理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、单元测试 1.ui_test.c 2.上机测试 前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显…

docker笔记1

docker笔记1 一、为什么要学docker?二、docker是什么三、docker安装 一、为什么要学docker? 在过去&#xff0c;开发人员编写的代码在不同的环境中运行时常常面临一些问题&#xff0c;例如“在我的机器上可以运行&#xff0c;但在你的机器上却不行”的情况。这种问题部分原因…

如何在 CentOS 上配置本地 YUM 源

引言 CentOS 作为一个流行的企业级 Linux 发行版&#xff0c;依赖 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来管理软件包。YUM 源&#xff08;Repository&#xff09;是软件包存储和分发的中心&#xff0c;它们通常位于互联网上。然而&#xff0c;在某些情况下…