QML教程(一)基础语法

news2024/11/18 7:31:37

目录

一、导入

二、对象声明

 三、对象属性

1.声明对象属性

2.信号属性

3.方法属性

4.附加属性略 

5.枚举属性 

6.对象属性赋值

四、自定义对象


一、导入

  1. 模块导入
    语法:
    import <ModuleIdentifier> [<Version.Number>] [as <Qualifier>]

    例:

    import QtQuick
    import QtQuick 2.10
    import QtQuick as Quick
  2. 目录导入
    语法:
    import "<DirectoryPath>" [as <Qualifier>]

    例:

    import "../privateComponents"
    import "../textwidgets" as MyModule

二、对象声明

  1. 对象
    对象声明由其对象类型的名称组成,后跟一组大括号。然后,所有属性和子对象都在这些大括号内声明。例:
    import QtQuick 2.0
    
    Rectangle {
        width: 100
        height: 100
        color: "red"
    }
  2. 对象树中的子对象
    任何对象声明都可以通过嵌套对象声明定义子对象。这样,任何对象声明都会隐式声明可能包含任意数量的子对象的对象树。例:
    import QtQuick 2.0
    
    Rectangle {
        width: 100
        height: 100
    
        gradient: Gradient {
            GradientStop { position: 0.0; color: "yellow" }
            GradientStop { position: 1.0; color: "green" }
        }
    }
  3. 视觉场景中的子对象
    视觉场景中父子关系的概念由模块中的 Item 类型提供,这是大多数 QML 类型的基本类型,因为大多数 QML 对象都是要直观呈现的。例如,“矩形”和“文本”都是基于Item的类型
    import QtQuick 6.2
    
    Rectangle {
        width: 200
        height: 200
        color: 'red'
    
        data: [
            Text {
                anchors.centerIn: parent
                text: qsTr("Hello QML")
            }
        ]
    }
    

    简写形式

    import QtQuick 6.2
    
    Rectangle {
        width: 200
        height: 200
        color: 'red'
    
        Text {
            anchors.centerIn: parent
            text: qsTr("Hello QML")
        }
    }
    
  4. 坐标
    Qt Quick中使用的默认视觉坐标系统是项目坐标。这是一个笛卡尔坐标系,(0,0) 位于项目的左上角。x 轴向右增长,y 轴向下增长,因此项目的右下角位于坐标(宽度、高度)处。坐标数值是指在其父容器中的坐标。例:
    Rectangle {
        width: 200
        height: 200
        color: "red"
    
        Rectangle {
            x: 100
            y: 100
            width: 100
            height: 100
            color: "blue"
    
            Rectangle {
                width: 50
                height: 50
                color: "green"
            }
        }
    }

  5. 堆叠
    Qt Quick 项目使用递归绘制算法来确定在发生碰撞时将哪些项目绘制在顶部。通常,项目按照创建顺序(或在 QML 文件中指定z属性:低于0的z值将堆叠在父级下方)绘制在其父项目之上。z值的越大,优先级越高,但仅限于同父级比较,如果父级优先级低于其他父级,即使子级z值极大,也不会比其他父级要高。
  6. 注释
    单行注释以 // 开头,在行尾结束。
    多行注释以 /* 开头,以 */ 结尾
    例:
    Text {
        text: "Hello world!"    //a basic greeting
        /*
            We want this text to stand out from the rest so
            we give it a large size and different font.
         */
        font.family: "Helvetica"
        font.pointSize: 24
    }

 三、对象属性

1.声明对象属性

除枚举类型(用int代替)之外的任何 QML 值类型都可以用作自定义属性类型

语法:

[default] [required] [readonly] property <propertyType> <propertyName>

 例:

Item {
    property int someNumber
    property string someString
    property url someUrl
    property color previousColor
    //var 值类型是一个通用占位符类型,可以保存任何类型的值,包括列表和对象
    property var someNumber: 1.5
    property Rectangle someRectangle
    states: [
        State { name: "loading" },
        State { name: "running" },
        State { name: "stopped" }
    ]
    // 如果list只有一个项,则可以省略[]
    states: State { name: "running" }
    property list<Rectangle> siblingRects
    property list<Rectangle> childRects: [
        Rectangle { color: "red" },
        Rectangle { color: "blue"}
    ]
}

分组属性

Text {
    //dot notation
    font.pixelSize: 12
    font.b: true
}

Text {
    //group notation
    font { pixelSize: 12; b: true }
}

 默认属性:使用default标注为默认属性,使用时可以不用声明key

// MyLabel.qml
import QtQuick 2.0

Text {
    default property var someText

    text: "Hello, " + someText.text
}

使用时,而这效果相同 

MyLabel {
    Text { text: "world!" }
}

MyLabel {
    someText: Text { text: "world!" }
}

 on 语法:

<PropertyModifierTypeName> on <propertyName> {
    // attributes of the object instance
}

目前有两种使用方式:

  • 属性值写入侦听器
    目前主要用于监听动画属性,例:
    import QtQuick 2.0
    
    Item {
        width: 400
        height: 50
    
        Rectangle {
            width: 50
            height: 50
            color: "red"
    
            NumberAnimation on x {
                from: 0
                to: 350
                loops: Animation.Infinite
                duration: 2000
            }
        }
    }
  • 属性值源

2.信号属性

信号是来自对象的通知,指示发生了某些事件:例如,属性已更改、动画已启动或停止,或者图像已下载。例如,鼠标区域类型具有当用户在鼠标区域内单击时发出的单击信号。

每当发出特定信号时,都可以通过信号处理程序通知对象。信号处理程序使用语法 on<Signal 声明>其中 <Signal> 是信号的名称,第一个字母大写。信号处理程序必须在发出信号的对象的定义中声明,并且处理程序应包含调用信号处理程序时要执行的 JavaScript 代码块。

例如,下面的 onClicked 信号处理程序是在 MouseArea 对象定义中声明的,并在单击 MouseArea 时调用,从而导致打印控制台消息:

import QtQuick 2.0

Item {
    width: 100; height: 100

    MouseArea {
        anchors.fill: parent
        onClicked: {
            console.log("Click!")
        }
    }
}

语法:

signal <signalName>[([<parameterName>: <parameterType>[, ...]])]

例:

import QtQuick 2.0

Item {
    // 无参数可省略括号
    signal clicked
    signal hovered()
    // 指定参数
    signal actionPerformed(action: string, actionResult: int)
}

 发出信号:
直接通过id调用信号即可

id.actionPerformed("something", 1)

处理信号:
on<Signal>:fun即可

onDeactivated: console.log("Deactivated!")

属性更改信号处理器:

on<Property>Changed

例:

import QtQuick 2.0

TextInput {
    text: "Change this!"

    onTextChanged: console.log("Text has changed to:", text)
}


3.方法属性

语法:

function <functionName>([<parameterName>[: <parameterType>][, ...]]) [: <returnType>] { <body> }

例1:

import QtQuick 2.0
Rectangle {
    id: rect

    function calculateHeight() : real {
        return rect.width / 2;
    }

    width: 100
    height: calculateHeight()
}

 例2:

import QtQuick 2.0

Item {
    width: 200; height: 200

    MouseArea {
        anchors.fill: parent
        onClicked: (mouse)=> label.moveTo(mouse.x, mouse.y)
    }

    Text {
        id: label

        function moveTo(newX: real, newY: real) {
            label.x = newX;
            label.y = newY;
        }

        text: "Move me!"
    }
}

4.附加属性
略 

5.枚举属性 

枚举提供一组固定的命名选项。它们可以使用关键字在 QML 中声明:enum

// MyText.qml
Text {
    enum TextType {
        Normal,
        Heading
    }

    property int textType: MyText.TextType.Normal

    font.bold: textType == MyText.TextType.Heading
    font.pixelSize: textType == MyText.TextType.Heading ? 24 : 12
}

6.对象属性赋值

  • 初始化时的值赋值
    <propertyName> : <value>
    import QtQuick 2.0
    
    Rectangle {
        color: "red"
        property color nextColor: "blue" // combined property declaration and initialization
    }
  • 命令式值赋值
    [<objectId>.]<propertyName> = value
    import QtQuick 2.0
    
    Rectangle {
        id: rect
        Component.onCompleted: {
            rect.color = "red"
        }
    }

四、自定义对象

现在我们定义一个消息框对象:MessageLabel
新建QML文件:MessageLabel.qml

// MessageLabel.qml
import QtQuick

Rectangle {
    height: 50
    //声明消息内容:message
    property string message: "debug message"
    //声明消息类型:msgType(debug、warning、critical)
    property string msgType: "debug"
    Column {
        anchors.fill: parent

        Text {
            text: msgType.toString().toUpperCase() + ":"
            font.bold: msgType === "critical"
            color: msgType === "warning" || msgType === "critical" ? "red" : "blue"
            //动画
            ColorAnimation on color {
                running: msgType === "critical"
                from: "red"
                to: "black"
                duration: 1000
                loops: msgType === "critical" ? Animation.Infinite : 1
            }
        }
        Text {
            text: message
            color: msgType === "warning" || msgType === "critical" ? "red" : "blue"
        }
    }

}

使用:

// application.qml
import QtQuick

Column {
    width: 180
    height: 180
    padding: 1.5
    topPadding: 10.0
    bottomPadding: 10.0
    spacing: 5

    MessageLabel{
        width: parent.width - 2
        msgType: "debug"
    }
    MessageLabel {
        width: parent.width - 2
        message: "This is a warning!"
        msgType: "warning"
    }
    MessageLabel {
        width: parent.width - 2
        message: "A critical warning!"
        msgType: "critical"
    }
}

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

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

相关文章

面向对象设计原则概述

面向对象设计原则概述 软件的可维护性和可复用性 软件工程和建模大师Peter coad认为&#xff0c;一个好的系统设计与应该具备如下三个性质 可扩展性 灵活性 可插入性 软件的可维护性和可复用性 软件的复用和重用拥有众多优点&#xff0c;如可以提高软件的开发效率&#xf…

Educational Codeforces Round 92 (Rated for Div. 2) B. Array Walk

翻译&#xff1a; 给定一个数组&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;由&#x1d45b;个正整数组成。 最初&#xff0c;您位于索引1&#xff0c;分数等于&#x1d44e;1。你可以执行两种动作: 向右移动…

CDN

CDN——Content Delivery Network&#xff0c;内容分发网络。 具体来说&#xff0c;CDN就是采用更多的缓存服务器&#xff08;CDN边缘节点&#xff09;&#xff0c;布放在用户访问相对集中的地区或网络中。当用户访问网站时&#xff0c;利用全局负载技术&#xff0c;将用户的访…

【CSP】邻域均值

邻域均值 邻域均值 题意比较好理解&#xff0c;就是算一些数字。如果采用暴力方法的话&#xff0c;就是用一个边长为 2∗r12*r12∗r1 的正方形框框住大矩阵&#xff0c;然后遍历这个框&#xff0c;求出其平均值&#xff0c;然后移动正方形框&#xff0c;直到大矩阵内所有像…

【免费开放源码】审批类小程序项目实战(预约审批端)

第一节&#xff1a;什么构成了微信小程序、创建一个自己的小程序 第二节&#xff1a;微信开发者工具使用教程 第三节&#xff1a;深入了解并掌握小程序核心组件 第四节&#xff1a;初始化云函数和数据库 第五节&#xff1a;云数据库的增删改查 第六节&#xff1a;项目大纲以及制…

6.5 特殊用途语言特性

文章目录默认实参使用默认实参调用函数默认实参声明默认实参初始值内联函数和constexpr函数内联函数constexpr 函数把内联函数和constexpr函数声明在头文件内调试帮助assert预处理宏NDEBUG预处理变量默认实参 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同…

电子游戏销售之缺失值检测与处理

电子游戏销售之缺失值检测与处理 文章目录电子游戏销售之缺失值检测与处理0、写在前面1、数据缺失值预处理1.1 表的形状1.2 原始数据每个特征缺失和非缺失的数目1.3 每个特征缺失的率1.4 处理后各特征缺失值的数目1.5 删除缺失值后的数据展示2、替换法处理缺失值2.1 替换法2.2 …

1.Springboot配置细节

一、参考资料 13-SpringBoot配置-项目外部配置加载顺序_哔哩哔哩_bilibili 二、配置 2.1 配置文件 注意变量后面是:&#xff0c;而不是等号 2.2 读取配置文件 2.2.1 Value 比如配置文件application.properities中定义了一个name&#xff0c;其值为abc。 代码里面只需按照如…

一、软件安装与配置

一、PyTorch环境软件安装与配置 1.安装anaconda参考 anaconda老版本下载方法&#xff08;如何查看anaconda与python版本对应关系&#xff09;及安装教程_breadth_的博客-CSDN博客_anaconda旧版本下载 2.在anconda下安装和激活pytorch环境 此步并没有下载pytorch 3.下载pyto…

云计算运营—03 KVM虚拟化技术方案介绍

KVM虚拟化技术方案介绍 1.背景介绍 KVM&#xff08;Kernel-based Virtual Machine&#xff09; 开源全虚拟化方案 支持体系结构 x86(32位,64位)、IA64、PowerPC、S390 依赖x86硬件支持&#xff1a;Intel VT-x/ AMD-V内核模块&#xff0c;使得linux内核成为hypervisor XEN架构 …

《B-树》

tips&#xff1a;B-树读成b树&#xff0c;并不是b减树 【一】基本搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索树无要求O(N)二叉平衡树&#xff08;AVL和红黑树&#xff09;无要求&#xff0c;最后随机O(log2N)哈希无要求O(1)位图无要求O…

linux系统中SPI驱动框架的基本原理与实现

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何使用linux系统中SPI驱动ICM-20608六轴传感器的操作。 目录 第一&#xff1a;linux系统下SPI驱动框架简介 第二&#xff1a;SPI设备驱动编写 第三&#xff1a;SPI设备和驱动匹配过程 第一&#xff1a;linux系统下SPI驱…

MySQL数据库高级面试题(1)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

CSDN年度征文 | 你好,2023

祝大家新年快乐~&#x1f9e7;&#x1f9e7;&#x1f9e7;⭐过去的2022⭐2022已成过去&#xff0c;2023慢步向我们走来。回首2022&#xff0c;这一年不是平凡的一年。这一年&#xff0c;有苦也有乐。冬奥会的成功举办、香港回归25周年、二十大胜利召开、航天任务圆满成功等等都…

设计 | 分享5个好用的PPT模板网站

第一PPT 这个老牌的模板网站了&#xff0c;全站都是免费下载&#xff0c;还是不错的 但是素材质量嘛&#xff0c;免费所以不太高。 第一PPT下载https://www.1ppt.com/ 模板狗 这个是最近发现的一个网站&#xff0c;其中内容比较精美。 而且不用开会员也能单独购买&#x…

【Android】APT

引言&#xff1a; 安卓中APT又叫Annotation Processing Tool&#xff0c;即注解处理器。Java中注解分为编译时注解和运行时注解&#xff0c;编译时注解无法通过反射的方式进行获取和处理&#xff0c;所以我们可以利用APT处理编译时注解。比如常见的三方库ButterKnife、ARouter…

mysql删除重复记录并且只保留一条

准备的测试表结构及数据 插入的数据中A,B,E存在重复数据,C没有重复记录 CREATE TABLE tab ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(20) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT13 DEFAULT CHARSETutf8; -- --------------------…

使用root用户和普通用户完成分配任务案例 ansible(1)

目录 案例一&#xff1a; 控制主机和受控主机通过root用户通过免密验证方式远程控制受控主机实施对应任务。 案例二&#xff1a; 控制主机连接受控主机通过普通用户以免密验证远程控制受控主机实施特权指定操作。 案例一&#xff1a; 控制主机和受控主机通过root用户通过免…

<网络概述>——《计算机网络》

目录 1.网络基础 1.1 计算机网络背景 1.2 网络发展 1.3 软件分层 1.4 网络和操作系统的关系 1.5 局域网通信的原理 2. 网络协议 2.1 网络协议初识 2.1.1 协议分层 2.2 OSI七层模型 2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程 3.1 网络传输流程图 3.2 数据包…

密码技术扫盲,Part 3:认证

个人博客 密码技术扫盲&#xff0c;Part 1&#xff1a;对称加密密码技术扫盲&#xff0c;Part 2&#xff1a;非对称加密&#x1f3af; 密码技术扫盲&#xff0c;Part 3&#xff1a;认证 除了加密&#xff0c;还有一类用法是对信息的认证&#xff0c;主要包括 4 个技术 单向散…