【qml学习笔记】1语法和基础

什么是qmlqtquick

  • qml:qt公司开发的一种声明式型语言,相较于c++更加的方便,也更容易写出好看的界面
  • QtQuick是一个基于QML的框架。

基本语法

import QtQuick 2.15
import QtQuick.Window 2.15

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

    Rectangle{
        id:rect1
        x:50
        y:50
        z:1 //z轴可以决定平面上的覆盖关系
        width: 100
        height:50
        color: "red"
        focus: true
        rotation: 30;
    }
    Rectangle{
        id:rect2
        x:120
        y:120
        z:2
        width: 100
        height: 50
        color: "blue"
        MouseArea
        {
            anchors.fill: parent
            onClicked:
            {
                console.log(rect1.color)
              if(rect1.color=="#ff0000"){rect1.color="#000000"}
              else if(rect1.color=="#000000"){rect1.color="#ff0000"}
                rect1.rotation+=10
            }
        }
    }
}

  • import语句导入一个模块qt6可以不写版本号自动加载最高版本的模块

  • 对于单行注释,可以使用//,对于多行注释,可以通过/**/进行注释。

  • 就像在C/C++和JavaScript中一样每个QML文件都需要有一个唯一的根元素,就像HTML一样

  • 元素声明形式为:type{}元素可以有属性,形式为:name:valueQML文档中的任意元素可以通过使用其id(不带引号的标识符)进行访问

  • 元素可以嵌套,这意味着父元素可以有子元素子元素可以使用parent关键字访问父元素

  • QML中集成了JavaScript,你可以在QML文件中使用JavaScript表达式来计算属性值、处理事件等。JavaScript表达式可以包含算术运算、逻辑运算、条件语句等。

属性

 Text {
    id: thisLabel
    x: 300; y: 100
    height: 2 * width
    property int times: 24//定义新属性
    property alias anotherTimes: thisLabel.times
    text: "thisLable " + anotherTimes
    font.family: "微软雅黑"
    font.pixelSize: 24
    KeyNavigation.tab:rect1 //切换焦点到某个item(指定tab键)
    onHeightChanged: console.log('height:', height)
    focus: true
    color: focus ? "red" : "black" //color属性改变时就会自动生效
    }
Rectangle{
        id:rect1
        x:50
        y:50
        width: 100
        height:50
        rotation: 30;
        color: focus ? "red" : "black"
        KeyNavigation.tab:thisLabel
    }
  • id是用于引用QML文件(在QML中称为“document”)中的元素。id在文档中必须是唯一的,不能重置为其他值。(类似于C++的引用。)
  • 属性可以设置值,具体取决于其类型。如果没有为属性指定值,将使用默认初始值。属性可以依赖于一个或多个其他属性。这称为绑定。
  • 可以使用property限定符向元素添加新属性,后跟类型、名称和可选的初始值(property 类型 名称:值)。
  • 声明属性的另一种重要方式是使用别名关键字(property alias 名称 :引用)。
  • 基于int的值将自动转换为字符串类型。每次times属性更改时都会更新文本。
  • 编写grouped property的另一种方法是font{family:“Ubuntu”; pixelSize:24}
  • 可以为属性提供处理程序,属性更改后被调用。

JavaScript

 Text {
    id: thisLabel
    x: 300; y: 100
    height: 2 * width
    property int spacetimes: 0//定义新属性
    property alias anotherTimes: thisLabel.spacetimes//相当于引用
    text: "thisLable " + anotherTimes
    font.family: "微软雅黑"
    font.pixelSize: 24
    KeyNavigation.tab:rect1 //切换焦点到某个item(指定tab键)
    onHeightChanged: console.log('height:', height)
    focus: true
    color: focus ? "red" : "black" //color属性改变时就会自动生效

    Keys.onSpacePressed: increment();//focus时才生效
    onTextChanged: (text)=>{console.log(text)}
    
    function increment(){
        spacetimes+=1;
    }

    }
  • function name(parameters){…}的形式定义JavaScript函数,它增加了计数器。每次SpacePress递增时,绑定属性也将更新。
  • 也可以使用箭头函数((text)=>{})。
  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
# QML基础语法 QML是一种声明式语言,用于在Qt框架中创建用户界面。它允许您创建灵活且易于维护的GUI元素,同时保持高性能和流畅的用户体验。以下是QML基础语法。 ## 声明元素 QML中的每个GUI元素都是一个声明元素,可以通过以下方式声明: ``` <元素类型> { // 元素属性 } ``` 例如,以下代码声明了一个Rectangle元素,并设置了它的颜色和大小属性: ``` Rectangle { color: "red" width: 100 height: 100 } ``` ## 元素属性 元素属性用于设置元素的外观和行为。属性可以是简单值(如数字或字符串),也可以是复杂值(如对象或数组)。属性使用冒号(:)分隔,并且可以在花括号({})中包含JavaScript表达式。 例如,以下代码设置了一个Rectangle元素的颜色和大小属性,其中大小属性使用了一个JavaScript表达式: ``` Rectangle { color: "red" width: 100 height: 2 * width } ``` ## 元素嵌套 元素可以嵌套在其他元素中,从而创建更复杂的GUI元素。嵌套元素使用花括号表示,并且可以包含任意数量的属性和其他元素。 例如,以下代码创建了一个包含两个Rectangle元素的元素: ``` Item { Rectangle { color: "red" width: 100 height: 100 } Rectangle { color: "blue" width: 50 height: 50 x: 50 y: 50 } } ``` ## 元素信号 元素信号用于在元素之间传递信息。信号可以由元素发出,并由其他元素捕获。信号使用signal关键字声明,并且可以接受任意数量的参数。 例如,以下代码声明了一个Button元素,并定义了一个clicked信号: ``` Button { text: "Click me!" onClicked: { console.log("Button clicked!") clicked() } signal clicked() } ``` ## JavaScript表达式 QML中的JavaScript表达式用于计算属性值和执行其他计算。表达式可以包含变量,函数调用和运算符,并且可以在花括号中使用。 例如,以下代码使用JavaScript表达式设置一个Rectangle元素的颜色属性: ``` Rectangle { color: Qt.rgba(1, 0, 0, 0.5) width: 100 height: 100 } ``` ## 绑定属性 QML中的属性可以绑定到其他属性或JavaScript表达式。这意味着当一个属性更改时,绑定到它的其他属性也会随之更改。 例如,以下代码创建了两个Rectangle元素,并将第二个元素的颜色属性绑定到第一个元素的颜色属性: ``` Rectangle { id: rect1 color: "red" width: 100 height: 100 } Rectangle { color: rect1.color width: 50 height: 50 x: 50 y: 50 } ``` ## QML对象 在QML中,对象是指具有属性和方法的实例。对象可以用来表示GUI元素,如Rectangle和Button,也可以用来表示非GUI元素,如XML数据和网络套接字。 例如,以下代码创建了一个XML对象,并使用其属性和方法: ``` XmlListModel { id: xmlModel source: "http://example.com/data.xml" query: "/items/item" XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "description"; query: "description/string()" } } ListView { model: xmlModel delegate: Text { text: title font.bold: true } } ``` ## 总结 这些是QML基础语法。使用它们可以创建丰富的GUI元素和交互式应用程序。为了更深入地了解QML,请查看官方文档和示例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值