QML学习笔记1-基本语法

import QtQuick 2.8 //声明导入一个指定的模块版本

// 注释和C++一样 //或 /**///每个QML文件都需要一个根元素
//元素拥有属性 按照name:value的格式来赋值
//任何在QML文档中的元素都可以使用他们的id来进行访问(id是一个任意的标识符)
//元素可以嵌套 一个父元素可以用于多个子元素, 子元素可以通过 parent 关键字来访问父元素
//一般QML文件中根元素id习惯使用root

Rectangle{
    id: root
    width: 120; height: 240
    color: "#FF0000"

    Image {
        id: rocket
        source: "asserts/rocket.png"
    }

    Text {
        //id: name
        y:rocket.y + rocket.height + 20
        text: qsTr("Rocket")
        width: root.width
        horizontalAlignment: Text.AlignHCenter
    }
}

元素使用他们的元素类型名来进行声明,使用他们的属性或者创建自定义属性来定义
属性:
1 id, 是一个非常特殊的属性值,他在一个QML文件中被用来引用元素, 一个id值在一个qml文件中是唯一的
2 一个属性能够设置一个值,这个值依赖于他的类型。如果没有赋值则会被初始化为一个默认值
3 一个属性能够依赖一个或多个其他的属性 这种操作称作为属性绑定
4 添加子集定义的属性需要使用property:

第一个qml程序 helloWorld

import QtQuick 2.6
import QtQuick.window 2.2

Window
{
    id: root;
    visible: true;
    width: 640; height: 480;
    title: qsTr("Hello World!")
    
    MouseArea{
        anchors.fill: parent;
        onClicked: {
            Qt.quit();
        }
    }
    
    Text{
        text: "Hello World";
        anchors.centerIn: parent
    }
}

1 QML是一种声明语言, 用于描述程序界面
2 QML将用户界面分解成一块块小的元素, 每一元素都由许多组件构成
3 QML定义了用户界面元素的外观和行为;更复杂的逻辑则可以结合JavaScript脚本实现。 有点类似于Html和JavaScript,前者用来定义显示界面,后者用来定义行为
4 QML最简单的元素关系是层次关系, 子元素处于相对于父元素的坐标系统中,子元素的x和y的坐标始终相当于父元素
5 QML文档总要有import部分 用于指定该文档所需要引入的模块。通常这是一个模块和版本号。 如QtQuick2.6; 也可以引入自己的模块或者文件
6 QML文档的第二部分是QML元素, 一个QML文档只有一个根元素, 类似XML的规定, QML中元素使用{}包围起来,{}内是该元素的属性,以键值对方式给出, QML元素可以有一个id属性,作为该元素的名字,相当于该元素的指针。 id属性在整个QML文件中必须唯一, QML元素允许嵌套, 一个QML元素可以没有、可以有一个或多个子元素。子元素可以使用parent关键字访问父类元素
7 QML文档的注释使用//注释内容 或者/*注释内容*/ 同C++一样

Text { 
    // (1) 标识符 
    id: thisLabel 
    // (2) x、y 坐标 
    x: 24; y: 16 
    // (3) 绑定 
    height: 2 * width 
    // (4) 自定义属性 
    property int times: 24 
    // (5) 属性别名 
    property alias anotherTimes: times 
    // (6) 文本和值 
    text: "Greetings " + times 
    // (7) 字体属性组 
    font.family: "Ubuntu" 
    font.pixelSize: 24 
    // (8) 附加属性 KeyNavigation 
    KeyNavigation.tab: otherLabel 
    // (9) 属性值改变的信号处理回调 
    onHeightChanged: console.log('height:', height) 
    // 接收键盘事件需要设置 focus 
    focus: true 
    // 根据 focus 值改变颜色 
    color: focus?"red":"black" 
}


8 标识符id用于在QML文档中引用这个元素。 id并不一定是字符串, 而是特殊的标识符类型,一旦指定不允许重新设置,id也不能以数字开头, 具体规则同C++指针命名一致
9 属性的值由其类型决定, 如果一个属性没有给值,则会给属性的默认值, QML允许我们自定义属性, 可以在Property关键字申明一个自定义属性, 后面是属性类型和属性名 最后是属性值即

property<type><name>:<value>
//MyLabel.qml
import QuQuick2.6
Text{
    default property var defaultText
    text: "Hello" + defaultText.text
}


在MyLabel中, 声明了一个默认属性defaultText, 这个属性的类型为var. 这是一种通用类型, 可以保存任何类型的属性值。默认属性的含义在于, 如果一个子元素在父元素中,但是没有让子元素赋值给父元素的任何属性, 那么子元素属性就成为这个默认属性即

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


上述两个等价.这种默认属性的写法很像嵌套元素。其实嵌套元素正是利用这种默认属性实现的. 
使用alias关键字声明属性的别名 property alias<name>:<reference>. 别名和引用类似
有些属性可以附加到元素本身, 其语法是<Element>.<property>:<value>. 每一个属性都可以发出信号, 因而都可以关联信号处理函数。 这个函数将在属性变化时调用。这种变化的信号槽命名为on + 属性名 + Changed, 其中属性名要首字母大写, 如height属性变化时对应的槽函数命名为onHeightChanged.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值