QML 和QtQuick2

来源:https://www.devbean.net/2013/12/qt-study-road-2-qml-and-qtquick2/
从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。
QML 是一种基于 JavaScript 的声明式语言。
QML 文档描述了一个对象树。QML 元素包含了其构造块、图形元素(矩形、图片等)和行为(例如动画、切换等)。这些 QML 元素按照一定的嵌套关系构成复杂的组件,供用户交互。

Text {
        id: label
        x: 24; y: 100
        text: "Space pressed: " + spacePresses + " times"
        // 自定义属性,表示空格按下的次数
        property int spacePresses: 0
        // (1) 文本变化的响应函数
        onTextChanged: console.log("text changed to:", text)
        // 接收键盘事件,需要设置 focus 属性
        focus: true
        // (2) 调用 JavaScript 函数
        Keys.onSpacePressed: {
            increment()
        }
        // 按下 Esc 键清空文本
        Keys.onEscapePressed: {
            label.spacePresses = 0
            text
        }
        // (3) 一个 JavaScript 函数
        function increment() {
            spacePresses = spacePresses + 1
        }

    }

QML 文档中可以定义 JavaScript 函数,语法同普通 JavaScript 函数一样。

QML 的绑定机制同 JavaScript 的赋值运算符有一定类似。它们都可以将后面的值赋值给前面。不同之处在于,绑定会在后面的值发生改变时,重新计算前面的值;但是赋值只是一次性的。


可视元素:Item、Rectangle、Text、Image和MouseArea。

Item是所有可视元素中最基本的一个。它是所有其它可视元素的父元素,可以说是所有其它可视元素都继承Item。Item本身没有任何绘制,它的作用是定义所有可视元素的通用属性:

分组 属性
几何: x和y用于定义元素左上角的坐标,width和height则定义了元素的范围。z定义了元素上下的层 叠关系。
布局: anchors(具有 left、right、top、bottom、vertical 和 horizontal center 等属性)用于定位元素相对于其它元素的margins的位置。
键盘处理: Key和KeyNavigation属性用于控制键盘;focus属性则用于启用键盘处理,也就是获取焦点。
变形: 提供scale和rotate变形以及更一般的针对 x、y、z 坐标值变换以及transformOrigin点的transform属性列表。
可视化: opacity属性用于控制透明度;visible属性用于控制显示/隐藏元素;clip属性用于剪切元素;smooth属性用于增强渲染质量。
状态定义: 提供一个由状态组成的列表states和当前状态state属性;同时还有一个transitions列表,用于设置状态切换时的动画效果。

Rectangle:

 Rectangle{
        width: root.width
        height: root.height
        gradient: Gradient{
            GradientStop { position: 0.0; color: "red" }
            GradientStop { position: 0.33; color: "yellow" }
            GradientStop { position: 1.0; color: "green" }
        }
        border{
            color: "blue"
            width: 4
        }
        radius: 8
    }

Text元素
horizontalAlignment和verticalAlignment属性指定对齐方式
增强文本渲染,style和styleColor两个属性。这两个属性允许我们指定文本的显示样式和这些样式的颜色
在文本使用 … ,elide属性
文本自动换行,wrapMode

 Text {
        width: 160
        height: 120
        text: "A very very long text"
        //文本末尾使用 … ,**elide属性**
        elide: Text.ElideRight
        //文本自动换行
        wrapMode:Text.Wrap
        //设置行高
        lineHeight:1
        style: Text.Sunken
        styleColor: '#FF4444'
        verticalAlignment: Text.AlignTop
        font {
            pixelSize: 24
        }
    }

wrapMode:Text.Wrap:
这里写图片描述
wrapMode:Text.WrapAnywhere
这里写图片描述

Image属性

Image {
        x: 112;
        y: 12
        width: 48
        height: 118/2
        //本地路径(./images/home.png),也可以使网络路径(http://example.org/home.png)
        source: "image/file2.png"
        //fillMode设置改变大小的行文  Image.PreserveAspectCrop等比例切割
        fillMode: Image.PreserveAspectCrop
        //同时设置clip属性,避免所要渲染的对象超出元素范围。
        clip: true
    }

MouseArea:
不可见的矩形区域。通常,我们会将这个元素与一个可视元素结合起来使用,以便这个可视元素能够与用户交互。

Rectangle {
    id: rect1
    x: 12;
    y: 12
    width: 76;
    height: 96
    color: "lightsteelblue"
    MouseArea {
        /* ~~ */
    }
}

图片旋转 事件:

Image {
        id: wheel
        anchors.centerIn: parent
        source: "qrc:/images/wheel.png"

        Behavior on rotation {
            //旋转事件
            NumberAnimation{
                duration: 5000
            }
        }
    }
    MouseArea{
        width: wheel.width
        height: wheel.height
        anchors.centerIn: parent
        onClicked: {
            wheel.rotation = 360
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值