zoukankan      html  css  js  c++  java
  • QML基础——基本语法

    QML 的基本语法
    QML看起来像这样

    import Qt 4.7

    Rectangle {
    200
    height: 200
    color: "blue"

    Image {
    source: "pics/logo.png"
    anchors.centerIn: parent
    }
    }

    对象是通过类型而直接被指定的,紧随其后的是一对大括号。对象类型总是以大写字母开头。在上面的例子中,存在两个对象Rectangle和Image。在大括号之间,我们可以指定对象的相关信息,例如它的属性。属性是通过“property: value”这样的方式被呈现的。在上面的例子中,我们可以看到Image拥有一个属性叫做source,它被分配了一个值叫做"pics/logo.png"。属性和值被冒号分隔。

    属性可以被一行行指定:

    Rectangle {
    100
    height: 100
    }

    或单行输写多个属性:

    Rectangle {  100; height: 100 }

    当单行输写多属性/值时,必须由分号来分隔开来。

    Import语句导入Qt模块,它包含所有标准的QML元素。如果没有Import语句;那么RectangleImage元素将无效。

    表达式

    除了赋值属性外;你也可以用JavaScript编写的表达式来指定。

    Rotation {
    angle: 360 * 3
    }

    这些表达式可以包含其它对象与属性的引用,在这种情况下就会建立约束关联:当该表达式改变值时;该属性值将自动更新。

    Item {
    Text {
    id: text1
    text: "Hello World"
    }
    Text {
    id: text2
    text: text1.text
    }
    }

    在上面的示例中,text2对象将显示与text1相同的文本。如果text1改变值;那么text2也将自动更新为相同的值。

    注意这里我们通过使用id值引用其它的对象。(详情请参见id属性信息)

    QML注释

    QML中的注释类似于JavaScript

    单选注释 // 开始

    多行注释 /* 开始,以 */ 结束。

    import Qt 4.7

    注释是不被执行的,添加注释可对代码进行解释或者提高其可读性。

    注释同样还可用于防止代码执行,这对跟踪问题是非常有用的。

    Text {
    text: "Hello world!"
    //opacity: 0.5
    }

    在上面的示例中,这个Text对象将正常显示,一旦opacity: 0.5这行关掉注释,这是以半透明方式显示文本。

    属性

    属性命名

    属性命名以首字母为小字(附加属性除外)。

    属性类型

    QML支持许多类型的属性(参阅QML基本类型)。基本类型包括整型、实数型、布尔、字符串、颜色以及列表。

    Item {
    x: 10.5 // a 'real' property
    ...
    state: "details" // a 'string' property
    focus: true // a 'bool' property
    }

    QML属性是有类型安全检测的。也就是说,它们只允许你指定一个与属性类型相匹配的值。例如,项目x属性类型是实数,如果你赋值一个字符串;那么将会得到错误的信息。

    Item {
    x: “hello” // illegal!
    }
    id属性

    每个对象可给予一个特定唯一的属性称之为id。在同一个QML文件中不可能拥有与其它对象同名的id值。指定一个id可以允许该对象可以被其它的对象与脚本引用。

    下面的示例中,第一个矩形元素的id名为”myRect。第二个矩形元素的宽度是引用的myRect.widtch,这意味着它将与第一矩形具有相同的width值。

    Item {
    Rectangle {
    id: myRect
    100
    height: 100
    }
    Rectangle {
    myRect.width
    height: 200
    }
    }

    请注意,一个id首字符必须小写字母或下划线并且不能包含字母,数字和下划线以外的字符

    列表属性

    列表属性类似于下面这样:

    Item {
    children: [
    Image {},
    Text {}
    ]
    }

    列表包含在方括号内,以逗号分隔的列表元素。在你只分配单一项目列表情况可以省略方括号:

    Image {
    children: Rectangle {}
    }
    默认属性

    每个对象类型可以指定列表或对象属性之一作为默认属性。如果属性已被声明为默认属性,该属性标记可以省略。例如该代码:

    State {
    changes: [
    PropertyChanges {},
    PropertyChanges {}
    ]
    }

    可以简化成这样:

    State {
    PropertyChanges {},
    PropertyChanges {}
    }

    因为changesState类型的默认属性。

    分组属性

    在某些情况下使用一个‘.’符号或组符号形成一个逻辑组。

    组属性可写以下这样:

    Text {
    font.pixelSize: 12
    font.bold: true
    }

    或者这样:

    Text {
    font { pixelSize: 12; bold: true }
    }

    在元素文件组属性使用.符号显示。

    附加属性

    有些对象的属性附加到另一个对象。附加属性的形式为Type.property其中Type附加property的类型

    例如

    Component {
    id: myDelegate
    Text {
    text: "Hello"
    color: ListView.isCurrentItem ? "red" : "blue"
    }
    }
    ListView {
    delegate: myDelegate
    }

    ListView元素附加ListView.isCurrentItem属性到每个它创建的代理上。

    另一个附加属性的例子就是Keys元素,它用于处理任意可视项目上的按键,例如:

    Item {
    focus: true
    Keys.onSelectPressed: console.log("Selected")
    }
    信号处理器

    信号处理器允许响应事件时处理动作。例如,MouseArea元素有信号处理器来处理鼠标按下,释放以及单击:

    MouseArea {
    onPressed: console.log("mouse button pressed")
    }

    所有信号处理开始都是启用的

    一些信号处理一个可选的参数,例如MouseArea onPressed信号处理程序鼠标参数:

     MouseArea {
    acceptedButtons: Qt.LeftButton | Qt.RightButton
    onPressed: if (mouse.button == Qt.RightButton) console.log("Right mouse button pressed")
    }
  • 相关阅读:
    Java并发
    JS的强制类型转换
    JS的原生函数
    JS的类型和值
    解决Oracle临时表空间占满的问题
    nginx location匹配规则
    java.util.ConcurrentModificationException 解决办法
    SQL优化三板斧:精简之道、驱动为王、集合为本
    一次非典型SQL优化:如何通过业务逻辑优化另辟蹊径?
    一次耐人寻味的SQL优化:除了SQL改写,还要考虑什么?
  • 原文地址:https://www.cnblogs.com/hicjiajia/p/2332235.html
Copyright © 2011-2022 走看看