QML语法详解

合集下载

QML语法

QML语法
例:demo2
4. 表达式 JavaScript 表达式可以用于分配属性的值, 表达式可以包括其他的对象与属性的引用,在这种情况下就会建立约束关系,当该表达式改 变值时,该属性将会随之自动更新。
例:demo3
单行注释 // 多行注释 /* */
3. 对象标识符 每一个对象都可以指定一个唯一的 id 值,这样便可以再其它对象中识别并引用该对象。例 子: Id 可以在该对象所在的组件(component)中 任何地方使用,通过使用该对象的 id 来引用 该对象。所以,id 值在单一组件中必须是唯一的,对于 QML 对象而言,id 值 是一个特殊 的值,一但创建,id 就无法被改变。 Id 必须是小写字母或者下划线开头,不能使用字母, 数字,下划线以外的字符。
QMport 导入模块 没有 import 语句则使用的模块元素将无效
例:demo1
对象(大写字母开头){ Id:唯一标识符(小写字母开头) 属性:值 属性:值
对象(大写字母开头){ Id:唯一标识符(小写字母开头) 属性:值 属性:值 } }
2. 注释

从头学QtQuick(2)--QML语法从一个简单的例子说起

从头学QtQuick(2)--QML语法从一个简单的例子说起

从头学QtQuick(2)--QML语法从⼀个简单的例⼦说起在中,我们对QtQuick做了简单的介绍,体验了使⽤QML语⾔构建⼀个UI的便捷。

这⾥我们简要介绍⼀下QML的语法。

QML将界⾯分成⼀些更⼩的元素,这些元素可以组成⼀个组件,QML语⾔描述了UI的形状和⾏为,并且可以使⽤JavaScript修饰。

总的来说QML的结构有点像HTML,其语法和CSS⽐较近似。

1.QML层次结构要使⽤QML进⾏界⾯的布局,⾸先需要理解QML元素的层次结构。

QML的层次结构很简单,是⼀个树形结构,最外层必须有⼀个根元素,根元素⾥⾯可以嵌套⼀个或多个⼦元素,⼦元素⾥⾯还可以包含⼦元素。

如果⽤图形画出来的话⼤概是这个样⼦。

QML的坐标系采⽤的屏幕坐标系,原点在屏幕左上⾓,x轴从左向右增⼤,y轴从商到下增⼤,z轴从屏幕向外增⼤。

⼦元素从⽗元素上继承了坐标系统,它的x,y总是相对于它的⽗元素坐标系。

这⼀点⼀定要记住,⾮常重要。

2.基本语法我们主要对照下⾯的代码进⾏介绍:1import QtQuick 2.42import QtQuick.Window 2.23import QtQuick.Controls 1.245/* 这是⼀个多⾏注释,和c语⾔的⼀样 */6// 当然这是⼀个单⾏注释78Window {910 id:root; // Window元素的id,应该保证在这个qml⽂件中名字唯⼀11 visible: true;12 width: 460; // 直接指定窗⼝的宽度13 height: 288; // 直接指定窗⼝的⾼度1415 Image {16 id: bg;17 width: parent.width; // 图⽚的宽度依赖⽗窗⼝的宽度18 height: parent.height; // 图⽚的⾼度依赖⽗窗⼝的⾼度19 source: "qrc:///images/sky.jpg" // 引⽤⼀张图⽚20 }2122 Image {23 id: rocket;24 x: (parent.width - width) / 2; // 图⽚位置⽔平居中25 y: 40; // 图⽚位置距离⽗窗⼝4026 source: "qrc:///images/rocket.png";27 }2829 Text {30 // 没有指定id,即这是⼀个匿名元素31 y:rocket.y + rocket.height + 20; // ⽂本顶部距离rocket图⽚底部2032 anchors.horizontalCenter: parent.horizontalCenter // 设置⽂字⽔平居中33 text: qsTr("⽕箭发射!"); // 设置⽂本显⽰的⽂字34 color: "#ff2332"; // 设置⽂本颜⾊35 font.family: "楷体"; // 设置字体为楷体36 font.pixelSize: 30; // 设置⽂字⼤⼩37 }38}运⾏效果是这个样⼦。

qml emit 用法

qml emit 用法

qml emit 用法QML(Quick Markup Language)是用于设计用户界面的标记语言。

在QML 中,我们可以使用Emit语句来与Python QML组件进行通信。

本文将介绍QML Emit的用法,以及如何使用它来控制Python QML组件。

1. 什么是QML Emit?QML Emit是一种与Python QML组件通信的方法。

通过Emit语句,我们可以向Python QML组件发送信号,从而触发特定的函数或方法。

这使得我们可以在QML中控制Python组件,例如更改属性值、添加或删除项等。

2. 使用QML Emit的基本语法要在QML中使用Emit语句,我们需要先创建一个Python QML组件。

以下是一个简单的Python QML组件示例:```pythonimport sysfrom PyQt5.QtCore import QObject, pyqtSlot, QProperty, QMetaObjectfrom PyQt5.QtQml import QPropertyclass MyQMLObject(QObject):mySignal = pyqtSignal()def __init__(self):super().__init__()```@pyqtSlot()def on_mySignal(self):print("Python QML组件收到了信号!")def emit_signal(self):self.mySignal.emit()```接下来,我们可以在QML中使用这个组件并发送信号:```qmlimport QtQuick 2.0import MyQMLObject # 导入我们刚刚创建的Python QML组件ApplicationWindow {visible: truewidth: 640height: 480MyQMLObject {id: myObject}Button {text: "发送信号"onClicked: {myObject.emit_signal() // 使用Emit语句发送信号}}}```在这个例子中,我们创建了一个名为MyQMLObject的Python QML组件。

QML基础——入门教程

QML基础——入门教程

QML基础——入门教程QML(Qt Meta-Object Language)是一种用于创建用户界面的声明性语言。

它是Qt框架中的一部分,可以与C++代码无缝集成,用于构建跨平台的应用程序。

本教程将介绍QML的基础知识,帮助读者入门并开始使用这个强大的界面开发工具。

1.QML简介QML被设计用于创建灵活、动态和交互性强的用户界面。

与传统的基于代码的界面开发方式相比,QML使用一种声明式的语法,可以更直观地描述界面的结构和行为。

2.QML语法```import QtQuick 2.0Rectanglewidth: 400height: 400color: "red"Texttext: "Hello, World!"color: "white"anchors.centerIn: parent}}```这个示例代码创建了一个窗口,并在窗口中间显示了一个白色的文本。

在QML中,通过设置属性值来改变界面的样式和行为。

3.QML组件和属性QML中的组件是构成界面的基本元素,例如按钮、文本框和图片等。

每个组件都有一组属性,用于控制组件的外观和行为。

在上面的示例代码中,Rectangle和Text都是组件,而width、height、color和text等都是属性。

4.QML布局QML提供了多种布局方式,用于指定组件在界面中的位置和大小。

常用的布局方式包括垂直布局(ColumnLayout)、水平布局(RowLayout)和网格布局(GridLayout)等。

使用布局可以使界面的调整更加灵活和简单。

5.QML信号与槽在QML中,可以使用信号与槽机制来实现组件之间的交互。

通过定义信号和槽,可以使一个组件在特定条件下触发一个动作,然后其他组件可以对其进行响应。

这样可以实现各种用户界面的交互效果。

6.QML与C++集成由于QML是基于Qt框架的一部分,因此可以与C++代码无缝集成。

qt中qml的用法

qt中qml的用法

qt中qml的用法
QML(Qt Meta-Object Language)是一种声明性语言,用于设计
用户界面。

它是Qt框架中的一部分,用于开发跨平台的应用程序。


下是QML在Qt中的用法:
1. 定义QML文件:创建一个后缀名为.qml的文件,并使用QML
语法编写界面的结构和外观。

2. 导入Qt模块:使用import语句导入Qt模块,例如导入Qt Quick和Qt Quick Controls模块。

3. 创建界面元素:使用QML中的元素来创建界面元素,如Rectangle、Text、Image等。

4. 进行属性绑定:通过使用属性绑定语法,将属性值绑定到其
他对象的属性上。

例如,可以将文本的内容绑定到某个变量。

5. 响应用户事件:使用信号和槽机制来响应用户的操作。

可以
使用on关键字来定义事件处理程序,如鼠标点击、键盘按键等。

6. 使用属性动画:通过QML中的动画属性来创建、调整和控制
动画效果。

可以在元素上定义动画属性,如位置、大小、透明度等。

7. 处理数据模型:使用QML中的ListModel和ListView来处理
和显示数据模型。

可以将数据与可视组件关联起来,并动态更新视图。

8. 访问C++代码:使用Qt提供的接口,可以在QML中访问C++
代码。

可以创建将C++对象公开给QML的类,并在QML中直接使用。

以上是在Qt中使用QML的一些常见用法。

QML提供了一种简洁、灵活和易于理解的方法来设计和实现用户界面,使得开发者能够轻松
创建现代化的界面。

QML语法详解

QML语法详解

QML语法详解QML学习文档1. 介绍QML是一种描述语言,主要是对界面效果等的一种描述,它可以结合javaScript来进行更复杂的效果及逻辑实现。

比如做个游戏,实现一些更有趣的功能等2. 简单的例子import Qt4.7Rectangle{width:200height:200color:"blue"}代码是绘制一个蓝色的矩形,宽200 高200,import包含一个qt4.7的包3.基本元素的介绍(自己翻译意思会有出入,敬请见谅)基本可视化项Item 基本的项元素在QML中所有可视化的向都继承他Rectangle 基本的可视化矩形元素Gradient 定义一个两种颜色的渐变过程GradientStop 定义个颜色,被Gradient使用Image 在场景中使用位图BorderImage(特殊的项) 定义一张图片并当做边界AnimatedImage 为播放动画存储一系列的帧Text 在场景中使用文本TextInput 显示可编辑为文本IntValidator int 验证器DoubleValidator double 验证器RegExpValidator 验证字符串正则表达式TextEdit 显示多行可编辑文本基本的交互项MouseArea 鼠标句柄交互FocusScope 键盘焦点句柄Flickable 提供一种浏览整张图片的一部分的效果,具体看例子Flipable 提供一个平面,可以进行翻转看他的前面或后面,具体看例子状态State 定义一个配置对象和属性的集合PropertyChanges 使用一个State描述属性的改变StateGroup 包含一个状态集合和状态变换ParentChange 重新定义父集,也就是换个父节点AnchorChanges 在一个状态中改变anchors动画和变换Behavior 默认的属性变换动画SequentialAnimation 对定义的动画串行播放ParallelAnimation 对定义的动画并行播放PropertyAnimation 属性变换动画NumberAnimation 对实数类型属性进行的动画Vector3dAnimation 对QVector3d进行的属性ColorAnimation 颜色进行的变换动画RotationAnimation 对旋转进行的变换动画ParentAnimation 对父节点进行变换的动画,改变绑定的父节点AnchorAnimation 对anchor 进行改变的动画PauseAnimation 延迟处理SmoothedAnimation 允许属性平滑的过度SpringAnimation 一种加速的效果PropertyAction 允许在动画过程中对属性的直接改变ScriptAction 允许动画过程中调用脚本Transition 在状态变换中加入动作变化工作中的数据Binding 在创建的时候绑定一些数据到一些属性ListModel 定义链表数据ListElement 定义ListModel的一个数据项VisualItemModel 包含可视化项(visual items)到一个view中,相当是一个容器VisualDataModel 包含一个model和一个delegate,model包含需要的数据,delegate设计显示的项的信息,具体的去看例子Package 他的目的是把VisualDataModel共享给多个view,具体还要学习XmlListModel 特殊的一个模式使用XPath表达式,使用xml来设置元素,参考例子XmlRole XmlListModel的一个特殊的角色视图ListView 提供一个链表显示模型视图GridView 提供一个网格显示模型视图PathView 提供一个内容沿着路径来显示的模型Path 定义一个PathView使用的轨迹PathLine 定义一个线性的轨迹PathQuad 定义一个二次贝塞尔曲线的轨迹PathCubic 定义一个三次贝塞尔曲线的轨迹PathAttribute允许绑定一个属性上,具体看例子PathPercent 修改item分配的轨迹不是很明了其中的意思WebView 允许添加网页内容到一个canvas上定位器Column 整理它的子列(纵)Row 整理它的子行(横)Grid 设置它的子到一个网格上Flow 目的是不让他的子项重叠在一起实用Connections 明确连接信号和信号句柄Component 封装QML items 想一个组件一样Timer 提供时间触发器QtObject 基本的元素只包含objectName属性Qt qml全局Qt object提供使用的枚举和函数WorkerScript允许在QML使用线程Loader 控制载入item或组件Repeater 使用一个模型创建多个组件SystemPalette 为Qt palettes提供一个通道FontLoader 载入字体根据名字或URLLayoutItem 允许声明UI元素插入到qtGraphicsView 布局中变换Scale 分派item 缩放行为Rotation 分派item 旋转行为Translate 分派item 移动行为4.基本元素的使用例子1. Item位置是0,0 宽高分别是200Item{x:0;y:0;width:200;height:200;}2. Rectangle位置是:0,0宽高分别是200,颜色是红色Rectangle{x: 0; y: 0;width: 200; height: 200;color: "red"}3.Gradient GradientStop分别在总高度的0 颜色红色总高度的1/3 黄色总高度的1是绿色Rectangle{width:100;height:100gradient:Gradient{GradientStop{position:0.0;color:"red"}GradientStop{position:0.33;color:"yellow"}GradientStop{position:1.0;color:"green"}}}4.Image设置一张图片Image{source:"../Images/button1.png"}5.BorderImage他将一张图片分成9部分当图片进行缩放的时候A.1 3 7 9 位置的都不会进行缩放B. 2 8将根据属性horzontalTileMode 进行缩放C.4 6 将根据属性verticalTileMode 进行缩放D.5 将根据属性horzontalTileMode 和verticalTileMode 进行缩放BorderImage{width:180;height:180//分割1~9块的4个点是根据border设置的坐标来实现的//本别是距离坐标上边右边下边的距离border{left:30;top:30;right:30;bottom:30}horizontalTileMode:BorderImage.StretchverticalTileMode:BorderImage.Stretchsource:"../Images/button1.png"}6.AnimatedImage主要用于播放gif图片Rectangle{width:animation.width;height:animation.height+8AnimatedImage{id:animation;source:"animation.gif"}Rectangle{property int frames:animation.frameCountwidth:4;height:8x:(animation.width-width)*animation.currentFrame/framesy:animation.heightcolor:"red"}}7.Text显示文本(具体的其他设置请看文档)Text{text:"text"}8.TextInput下面是设置一个输入文本框,框中的字符串是Text, 并设置鼠标可以选择文本TextInput{text:"Text"selectByMouse:true;//鼠标可以选择}9.IntValidator int 型验证器,和输入框结合后就是只能输入整型数据T extInput{//最高可以输入100,最低输入10IntValidator{id:intval;bottom:10;top:100;}width:100;height:20;text:"";//使用校验器validator:intval;}10.DoubleValidator只能输入浮点数TextInput{//最高可以输入100,最低输入10decimals最多有多少位小数//notation表示是使用科学计数法还是(默认),还是直接的小数当获取里面的数据DoubleValidator{id:intval;decimals:4;bottom:10;top:100;notation:DoubleValidator.StandardNotation}width:100;height:20;text:"";//使用校验器validator:intval;}11.RegExpValidator使用正则表达式TextInput{//使用一个正则表达式来控制输入的字符串///^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/表示开始位置必须是一个大写或小写字母//接下来是0~2个的数字而且是0或1,在接下来是1~3个的小写字母RegExpValidator{id:intval;regExp:/^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/;}width:100;height:20;text:"";//使用校验器validator:intval;}12.TextEdit显示一段hello world的html文本和TextInput相同TextEdit{width:240text:"Hello World!"font.family:"Helvetica"font.pointSize:20color:"blue"focus:true13.MouseArea主要是用来判断鼠标事件的区域Rectangle{x:0;y:0;width:100;height:100;Rectangle{id:mousrectx:20;y:20;width:20;height:20;color:"blue"MouseArea{//使用父的区域作为鼠标判断的区域及x:20;y:20;width:20;height: 20;anchors.fill:parent;//但鼠标按下后mousrect变成红色,当鼠标松开后变成蓝色onPressed:{mousrect.color="red";}onReleased:{mousrect.color="blue";}}}}14.FocusScope不是很清楚说的什么,好像是说同一个时刻只有一个item有焦点15.Flickable显示一个200x200的框,框中显示图片上200x200的部分Flickable{width:200;height:200//设置使用图片的宽高,而现实的是200x200的现实框contentWidth:image.width;contentHeight:image.heightImage{id:image;source:"../Images/need.png"}16.Flipable包含两个面,一个前面,一个后面,实现一个控件前后的翻转效果,并且在后面可以添加一些控制Flipable{id:flipablewidth:240height:240property int angle:0property bool flipped:falsefront:Image{source:"front.png"}//前面back:Image{source:"back.png"}//后面//旋转动画前后面交换transform:Rotation{origin.x:flipable.width/2;origin.y:flipable.height/2axis.x:0;axis.y:1;axis.z:0//rotate around y-axis angle:flipable.angle }states:State{name:"back"PropertyChanges{target:flipable;angle:180}when:flipable.flipped}transitions:Transition{NumberAnimation{properties:"angle";duration:1000} }MouseArea{anchors.fill:parentonClicked:flipable.flipped=!flipable.flipped}}17.State//当鼠标按下后改变myRect的颜色Rectangle{id:myRectwidth:100;height:100color:"black"MouseArea{id:mouseAreaanchors.fill:parentonClicked:myRect.state=='clicked'?myRect.state="":myRect. state= 'clicked';}//设置状态states:[State{name:"clicked"PropertyChanges{target:myRect;color:"red"}}]}18.PropertyChanges//当鼠标按下后改变状态//状态里面的属性改变包含了文本和颜色的改变Text{id:myTextwidth:100;height:100text:"Hello"color:"blue"states:State{name:"myState"//当这个状态被设置的时候,将改变myText的文本和颜色PropertyChanges{target:myTexttext:"Goodbye"color:"red"}}MouseArea{anchors.fill:parent;onClicked:myText.state='myS tate'} }19.StateGroup一个状态组中可以包含很多的状态和变化,而状态也可以和变换绑定.20.StateChangeScript在状态中可以对脚本中的函数进行调用// Sc.jsfunction changeColor() // 返回蓝色{return "blue";}// test.qmlimport"Sc.js"as CodeRectangle{id:rectwidth:50;height:50color:"red"MouseArea{anchors.fill:parentonClicked:rect.state="first" // 鼠标按下改变状态}states:State{name:"first";StateChangeScript{name:"myScript";script:rect.color=Code.changeColor();}}}21.ParentChang把指定的item换一个item父节点Item{width:200;height:100Rectangle{id:redRectwidth:100;height:100color:"red"}//本来blueRect的父节点是Item当鼠标按下后他被设置到redRect上Rectangle{id:blueRectx:redRect.widthwidth:50;height:50color:"blue"states:State{name:"reparented"//改变父节点ParentChange{target:blueRect;parent:redRect;x:10;y:10}}MouseArea{anchors.fill:parent;onClicked:blueRect.state="re parented"} }}22.AnchorChangesRectangle{id:windowwidth:120;height:120color:"black"Rectangle{id:myRect;width:50;height:50;color:"red"}states:State{name:"reanchored"AnchorChanges{//改变myRect的anchors属性target:myRectanchors.top:window.topanchors.bottom:window.bottom}PropertyChanges{target:myRectanchors.topMargin:10anchors.bottomMargin:10}}//鼠标事件MouseArea{anchors.fill:parent;onClicked:window.state="rea nchored"} }23.BehaviorRectangle{id:rectwidth:100;height:100color:"red"//针对宽度的动画Behavior on width{NumberAnimation{duration:1000}}MouseArea{anchors.fill:parentonClicked:rect.width=50}}24.SequentialAnimation串行播放多个动画Rectangle{id:rect1width:500;height:500Rectangle{id:rect;color:"red"width:100;height:100//串行播放多个动画,先横向移动,在纵向移动SequentialAnimation{running:true;NumberAnimation{target:rect;properties:"x";to:50;duration: 1000}NumberAnimation{target:rect;properties:"y";to:50;duration:1000}。

qml条件语句

qml条件语句

qml条件语句
QML(Qt Meta-Object Language)是一种用于声明式UI设计的语言,与C++和Qt库紧密集成。

QML中的条件语句允许根据特定条件执行不同的
操作或逻辑。

在QML中,可以使用以下条件语句:
1. if语句:if语句根据条件执行特定的代码块。

示例:
```
if (condition)
//如果条件为真,执行这里的代码
} else
//如果条件为假,执行这里的代码
```
2. switch语句:switch语句根据表达式的结果执行匹配的代码块。

示例:
```
switch (e某pression)
case value1:
// 执行与value1匹配的代码
break;
case value2:
// 执行与value2匹配的代码
break;
default:
//如果没有与任何值匹配,执行这里的代码
```
3.三元运算符:三元运算符根据条件选择不同的值。

示例:
```
var result = condition ? value1 : value2;
```
以上是QML中常见的条件语句,可以根据具体的需求选择合适的语句来实现特定的逻辑。

qml知识点

qml知识点

qml知识点QML(Qt Meta-Object Language)是一种声明式语言,用于在Qt应用程序中设计用户界面。

它是Qt框架中的一部分,可以与C++代码无缝集成。

在本文中,我们将探讨一些关于QML的重要知识点。

一、QML的基本语法QML使用一种类似于JavaScript的语法,以声明式方式描述用户界面。

它使用对象、属性和信号来创建交互式的界面元素。

QML文件通常以.qml扩展名保存,并使用Qt Quick框架进行编译和运行。

QML的基本语法包括对象定义、属性设置和信号处理。

对象定义使用关键字“Item”或其他可用的QML元素来定义界面元素,如矩形、文本和按钮等。

属性设置使用冒号“:”将属性名称和属性值分隔开来,用于设置对象的外观和行为。

信号处理使用“on”关键字和信号名称来定义响应用户交互的操作。

二、QML元素和属性QML提供了丰富的元素和属性,用于创建各种类型的界面元素。

例如,Rectangle元素用于创建矩形区域,Text元素用于显示文本内容,Button元素用于创建按钮等。

每个元素都有一组属性,用于控制其外观和行为。

例如,矩形元素具有宽度、高度和颜色等属性,用于指定矩形的大小和颜色。

QML还提供了布局元素,用于管理界面元素的位置和大小。

例如,ColumnLayout元素用于将元素按垂直方向布局,RowLayout元素用于将元素按水平方向布局。

这些布局元素使界面的设计更加灵活和可扩展。

三、QML中的信号和槽在QML中,信号用于表示用户交互或特定事件的发生。

例如,当按钮被点击时,它将发出一个点击信号。

槽用于响应这些信号,并执行相应的操作。

QML使用on关键字来定义信号和槽的连接。

信号和槽的连接可以通过QML文件中的语法完成,也可以通过C++代码实现。

这使得在QML和C++之间实现交互非常容易。

通过信号和槽的连接,可以实现界面元素之间的通信和数据传递。

四、QML中的动画和过渡效果QML提供了丰富的动画和过渡效果,用于增强用户界面的交互性和可视化效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QML学习文档1. 介绍QML是一种描述语言,主要是对界面效果等的一种描述,它可以结合javaScript来进行更复杂的效果及逻辑实现。

比如做个游戏,实现一些更有趣的功能等2. 简单的例子import Qt4.7Rectangle{width:200height:200color:"blue"}代码是绘制一个蓝色的矩形,宽200 高200,import包含一个qt4.7的包3.基本元素的介绍(自己翻译意思会有出入,敬请见谅)基本可视化项Item 基本的项元素在QML中所有可视化的向都继承他Rectangle 基本的可视化矩形元素Gradient 定义一个两种颜色的渐变过程GradientStop 定义个颜色,被Gradient使用Image 在场景中使用位图BorderImage(特殊的项) 定义一张图片并当做边界AnimatedImage 为播放动画存储一系列的帧Text 在场景中使用文本TextInput 显示可编辑为文本IntValidator int 验证器DoubleValidator double 验证器RegExpValidator 验证字符串正则表达式TextEdit 显示多行可编辑文本基本的交互项MouseArea 鼠标句柄交互FocusScope 键盘焦点句柄Flickable 提供一种浏览整张图片的一部分的效果,具体看例子Flipable 提供一个平面,可以进行翻转看他的前面或后面,具体看例子状态State 定义一个配置对象和属性的集合PropertyChanges 使用一个State描述属性的改变StateGroup 包含一个状态集合和状态变换ParentChange 重新定义父集,也就是换个父节点AnchorChanges 在一个状态中改变anchors动画和变换Behavior 默认的属性变换动画SequentialAnimation 对定义的动画串行播放ParallelAnimation 对定义的动画并行播放PropertyAnimation 属性变换动画NumberAnimation 对实数类型属性进行的动画Vector3dAnimation 对QVector3d进行的属性ColorAnimation 颜色进行的变换动画RotationAnimation 对旋转进行的变换动画ParentAnimation 对父节点进行变换的动画,改变绑定的父节点AnchorAnimation 对anchor 进行改变的动画PauseAnimation 延迟处理SmoothedAnimation 允许属性平滑的过度SpringAnimation 一种加速的效果PropertyAction 允许在动画过程中对属性的直接改变ScriptAction 允许动画过程中调用脚本Transition 在状态变换中加入动作变化工作中的数据Binding 在创建的时候绑定一些数据到一些属性ListModel 定义链表数据ListElement 定义ListModel的一个数据项VisualItemModel 包含可视化项(visual items)到一个view中,相当是一个容器VisualDataModel 包含一个model和一个delegate,model包含需要的数据,delegate设计显示的项的信息,具体的去看例子Package 他的目的是把VisualDataModel共享给多个view,具体还要学习XmlListModel 特殊的一个模式使用XPath表达式,使用xml来设置元素,参考例子XmlRole XmlListModel的一个特殊的角色视图ListView 提供一个链表显示模型视图GridView 提供一个网格显示模型视图PathView 提供一个内容沿着路径来显示的模型Path 定义一个PathView使用的轨迹PathLine 定义一个线性的轨迹PathQuad 定义一个二次贝塞尔曲线的轨迹PathCubic 定义一个三次贝塞尔曲线的轨迹PathAttribute允许绑定一个属性上,具体看例子PathPercent 修改item分配的轨迹不是很明了其中的意思WebView 允许添加网页内容到一个canvas上定位器Column 整理它的子列(纵)Row 整理它的子行(横)Grid 设置它的子到一个网格上Flow 目的是不让他的子项重叠在一起实用Connections 明确连接信号和信号句柄Component 封装QML items 想一个组件一样Timer 提供时间触发器QtObject 基本的元素只包含objectName属性Qt qml全局Qt object提供使用的枚举和函数WorkerScript允许在QML使用线程Loader 控制载入item或组件Repeater 使用一个模型创建多个组件SystemPalette 为Qt palettes提供一个通道FontLoader 载入字体根据名字或URLLayoutItem 允许声明UI元素插入到qtGraphicsView 布局中变换Scale 分派item 缩放行为Rotation 分派item 旋转行为Translate 分派item 移动行为4.基本元素的使用例子1. Item位置是0,0 宽高分别是200Item{x:0;y:0;width:200;height:200;}2. Rectangle位置是:0,0宽高分别是200,颜色是红色Rectangle{x: 0; y: 0;width: 200; height: 200;color: "red"}3.Gradient GradientStop分别在总高度的0 颜色红色总高度的1/3 黄色总高度的1是绿色Rectangle{width:100;height:100gradient:Gradient{GradientStop{position:0.0;color:"red"}GradientStop{position:0.33;color:"yellow"}GradientStop{position:1.0;color:"green"}}}4.Image设置一张图片Image{source:"../Images/button1.png"}5.BorderImage他将一张图片分成9部分当图片进行缩放的时候A.1 3 7 9 位置的都不会进行缩放B. 2 8将根据属性horzontalTileMode 进行缩放C.4 6 将根据属性verticalTileMode 进行缩放D.5 将根据属性horzontalTileMode 和verticalTileMode 进行缩放BorderImage{width:180;height:180//分割1~9块的4个点是根据border设置的坐标来实现的//本别是距离坐标上边右边下边的距离border{left:30;top:30;right:30;bottom:30}horizontalTileMode:BorderImage.StretchverticalTileMode:BorderImage.Stretchsource:"../Images/button1.png"}6.AnimatedImage主要用于播放gif图片Rectangle{width:animation.width;height:animation.height+8AnimatedImage{id:animation;source:"animation.gif"}Rectangle{property int frames:animation.frameCountwidth:4;height:8x:(animation.width-width)*animation.currentFrame/framesy:animation.heightcolor:"red"}}7.Text显示文本(具体的其他设置请看文档)Text{text:"text"}8.TextInput下面是设置一个输入文本框,框中的字符串是Text, 并设置鼠标可以选择文本TextInput{text:"Text"selectByMouse:true;//鼠标可以选择}9.IntValidator int 型验证器,和输入框结合后就是只能输入整型数据TextInput{//最高可以输入100,最低输入10IntValidator{id:intval;bottom:10;top:100;}width:100;height:20;text:"";//使用校验器validator:intval;}10.DoubleValidator只能输入浮点数TextInput{//最高可以输入100,最低输入10decimals最多有多少位小数//notation表示是使用科学计数法还是(默认),还是直接的小数当获取里面的数据DoubleValidator{id:intval;decimals:4;bottom:10;top:100;notation:DoubleValidator.StandardNotation}width:100;height:20;text:"";//使用校验器validator:intval;}11.RegExpValidator使用正则表达式TextInput{//使用一个正则表达式来控制输入的字符串///^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/表示开始位置必须是一个大写或小写字母//接下来是0~2个的数字而且是0或1,在接下来是1~3个的小写字母RegExpValidator{id:intval;regExp:/^[a-zA-Z]{1}[0-1]{0,2}[a-z]{1,3}$/;}width:100;height:20;text:"";//使用校验器validator:intval;}12.TextEdit显示一段hello world的html文本和TextInput相同TextEdit{width:240text:"<b>Hello</b><i>World!</i>"font.family:"Helvetica"font.pointSize:20color:"blue"focus:true}13.MouseArea主要是用来判断鼠标事件的区域Rectangle{x:0;y:0;width:100;height:100;Rectangle{id:mousrectx:20;y:20;width:20;height:20;color:"blue"MouseArea{//使用父的区域作为鼠标判断的区域及x:20;y:20;width:20;height: 20;anchors.fill:parent;//但鼠标按下后mousrect变成红色,当鼠标松开后变成蓝色onPressed:{mousrect.color="red";}onReleased:{mousrect.color="blue";}}}}14.FocusScope不是很清楚说的什么,好像是说同一个时刻只有一个item有焦点15.Flickable显示一个200x200的框,框中显示图片上200x200的部分Flickable{width:200;height:200//设置使用图片的宽高,而现实的是200x200的现实框contentWidth:image.width;contentHeight:image.heightImage{id:image;source:"../Images/need.png"}}16.Flipable包含两个面,一个前面,一个后面,实现一个控件前后的翻转效果,并且在后面可以添加一些控制Flipable{id:flipablewidth:240height:240property int angle:0property bool flipped:falsefront:Image{source:"front.png"}//前面back:Image{source:"back.png"}//后面//旋转动画前后面交换transform:Rotation{origin.x:flipable.width/2;origin.y:flipable.height/2 axis.x:0;axis.y:1;axis.z:0//rotate around y-axis angle:flipable.angle}states:State{name:"back"PropertyChanges{target:flipable;angle:180} when:flipable.flipped}transitions:Transition{NumberAnimation{properties:"angle";duration:1000} }MouseArea{anchors.fill:parentonClicked:flipable.flipped=!flipable.flipped}}17.State//当鼠标按下后改变myRect的颜色Rectangle{id:myRectwidth:100;height:100color:"black"MouseArea{id:mouseAreaanchors.fill:parentonClicked:myRect.state=='clicked'?myRect.state="":myRect.state= 'clicked';}//设置状态states:[State{name:"clicked"PropertyChanges{target:myRect;color:"red"}}]}18.PropertyChanges//当鼠标按下后改变状态//状态里面的属性改变包含了文本和颜色的改变Text{id:myTextwidth:100;height:100text:"Hello"color:"blue"states:State{name:"myState"//当这个状态被设置的时候,将改变myText的文本和颜色PropertyChanges{target:myTexttext:"Goodbye"color:"red"}}MouseArea{anchors.fill:parent;onClicked:myText.state='myState'} }19.StateGroup一个状态组中可以包含很多的状态和变化,而状态也可以和变换绑定.20.StateChangeScript在状态中可以对脚本中的函数进行调用// Sc.jsfunction changeColor() // 返回蓝色{return "blue";}// test.qmlimport"Sc.js"as CodeRectangle{id:rectwidth:50;height:50color:"red"MouseArea{anchors.fill:parentonClicked:rect.state="first" // 鼠标按下改变状态}states:State{name:"first";StateChangeScript{name:"myScript";script:rect.color=Code.changeColor();}}}21.ParentChang把指定的item换一个item父节点Item{width:200;height:100Rectangle{id:redRectwidth:100;height:100color:"red"}//本来blueRect的父节点是Item当鼠标按下后他被设置到redRect上Rectangle{id:blueRectx:redRect.widthwidth:50;height:50color:"blue"states:State{name:"reparented"//改变父节点ParentChange{target:blueRect;parent:redRect;x:10;y:10}}MouseArea{anchors.fill:parent;onClicked:blueRect.state="reparented"} }}22.AnchorChangesRectangle{id:windowwidth:120;height:120color:"black"Rectangle{id:myRect;width:50;height:50;color:"red"}states:State{name:"reanchored"AnchorChanges{//改变myRect的anchors属性target:myRectanchors.top:window.topanchors.bottom:window.bottom}PropertyChanges{target:myRectanchors.topMargin:10anchors.bottomMargin:10}}//鼠标事件MouseArea{anchors.fill:parent;onClicked:window.state="reanchored"} }23.BehaviorRectangle{id:rectwidth:100;height:100color:"red"//针对宽度的动画Behavior on width{NumberAnimation{duration:1000}}MouseArea{anchors.fill:parentonClicked:rect.width=50}}24.SequentialAnimation串行播放多个动画Rectangle{id:rect1width:500;height:500Rectangle{id:rect;color:"red"width:100;height:100//串行播放多个动画,先横向移动,在纵向移动SequentialAnimation{running:true;NumberAnimation{target:rect;properties:"x";to:50;duration:1000} NumberAnimation{target:rect;properties:"y";to:50;duration:1000}}}}25.ParallelAnimationRectangle{id:rect1width:500;height:500Rectangle{id:rect;color:"red"width:100;height:100//并行播放动画,同时横向和纵向移动ParallelAnimation{running:true;NumberAnimation{target:rect;properties:"x";to:50;duration:1000} NumberAnimation{target:rect;properties:"y";to:50;duration:1000} }}}26.PropertyAnimationRectangle{id:rectwidth:100;height:100color:"red"states:State{name:"moved"PropertyChanges{target:rect;x:50}}transitions:Transition{//属性动画这里是当属性x或y发生变化的时候,就播放这样一个动画PropertyAnimation{properties:"x,y";easing.type:Easing.InOutQuad}}MouseArea{anchors.fill:parent;onClicked:rect.state="moved";}}27.NumberAnimationRectangle{width:100;height:100color:"red"//对当前item的x进行移动,目标移动到x=50 NumberAnimation on x{to:50;duration:1000}}28.Vector3dAnimation29.ColorAnimation颜色的过度Rectangle{width:100;height:100color:"red"ColorAnimation on color{to:"yellow";duration:1000} }30.RotationAnimation默认是绕z轴进行的旋转Item{width:300;height:300Rectangle{id:rectwidth:150;height:100;anchors.centerIn:parentcolor:"red"smooth:truestates:State{name:"rotated";PropertyChanges{target:rect;rotation:180}}transitions:Transition{RotationAnimation{duration:1000;direction: RotationAnimation.Counterclockwise}}}MouseArea{anchors.fill:parent;onClicked:rect.state="rotated"}}31.ParentAnimation一个切换父节点的动画,平滑的过度Item{width:200;height:100Rectangle{id:redRectwidth:100;height:100color:"red"}Rectangle{id:blueRectx:redRect.widthwidth:50;height:50color:"blue"states:State{name:"reparented"ParentChange{target:blueRect;parent:redRect;x:10;y:10} }transitions:Transition{ParentAnimation{NumberAnimation{properties:"x,y";duration:1000}}}MouseArea{anchors.fill:parent;onClicked:blueRect.state="reparented"} }}32.AnchorAnimationItem{id:containerwidth:200;height:200Rectangle{id:myRectwidth:100;height:100color:"red"}states:State{name:"reanchored"AnchorChanges{target:myRect;anchors.right:container.right}}transitions:Transition{//smoothly reanchor myRect and move into new position AnchorAnimation{duration:1000}}//当控件加载完成后Component.onCompleted:container.state="reanchored"}33.PauseAnimation延迟效果Item{id:containerwidth:200;height:200Rectangle{id:myRectwidth:100;height:100color:"red"SequentialAnimation{running:true;NumberAnimation{target:myRect;to:50;duration:1000;properties:"x";} PauseAnimation{duration:5000}//延迟100毫秒NumberAnimation{target:myRect;to:50;duration:1000;properties:"y";} }}}34.SmoothedAnimation平滑过度Rectangle{width:800;height:600color:"blue"Rectangle{width:60;height:60x:rect1.x-5;y:rect1.y-5color:"green"Behavior on x{SmoothedAnimation{velocity:200}} Behavior on y{SmoothedAnimation{velocity:200}} }Rectangle{id:rect1width:50;height:50color:"red"}focus:trueKeys.onRightPressed:rect1.x=rect1.x+100Keys.onLeftPressed:rect1.x=rect1.x-100Keys.onUpPressed:rect1.y=rect1.y-100Keys.onDownPressed:rect1.y=rect1.y+10035.SpringAnimation平滑的过度过程,在动画结束的时候有种弹性的效果Item{width:300;height:300Rectangle{id:rectwidth:50;height:50color:"red"Behavior on x{SpringAnimation{spring:2;damping:0.2}} Behavior on y{SpringAnimation{spring:2;damping:0.2}} }MouseArea{anchors.fill:parentonClicked:{rect.x=mouse.x-rect.width/2rect.y=mouse.y-rect.height/2}}36.PropertyAction主要是在动画过程中直接的改变一个属性transitions:Transition{...PropertyAction{target:theImage;property:"smooth";value:true} ...}38.ScriptAction在动画过程中嵌入脚本的调用SequentialAnimation{NumberAnimation{...}ScriptAction{script:doSomething();}NumberAnimation{...}}39.TransitionRectangle{id:rectwidth:100;height:100color:"red"MouseArea{id:mouseAreaanchors.fill:parent}states:State{name:"moved";when:mouseArea.pressedPropertyChanges{target:rect;x:50;y:50}}transitions:Transition{NumberAnimation{properties:"x,y";easing.type:Easing.InOutQuad} }}40.BindingItem{width:300;height:300Text{id:app;text:"xxxfa"}TextEdit{id:myTextField;text:"Please type here..."}//把myTextField和app的enteredText属性进行绑定Binding{target:app;property:"enteredText";value:myTextField.text} }41.ListModel直接看效果Rectangle{width:200;height:200ListModel{id:fruitModelListElement{name:"Apple"cost:2.45}ListElement{name:"Orange"cost:3.25}ListElement{name:"Banana" cost:1.95}}Component{id:fruitDelegateRow{spacing:10Text{text:name} Text{text:'$'+cost} }}ListView{ anchors.fill:parent model:fruitModel delegate:fruitDelegate }}42.ListElement请参照ListModel把可视化图元添加到链表试图Rectangle{width:100;height:100;VisualItemModel{id:itemModelRectangle{height:30;width:80;color:"red"} Rectangle{height:30;width:80;color:"green"} Rectangle{height:30;width:80;color:"blue"} }ListView{anchors.fill:parentmodel:itemModel}}44.VisualDataModel看下面效果Rectangle{width:200;height:100id:visualModelmodel:ListModel{ ListElement{name:"Apple"} ListElement{name:"Orange"} }delegate:Rectangle{height:25width:100Text{text:"Name:"+name} }}ListView{anchors.fill:parentmodel:visualModel}}45.Package具体请参考declarative/modelviews/package46.XmlListModel XmlRole从网络获取xml,暂时没有测试成功47.ListView参考ListModel VisualDataModel48.GridView看效果Rectangle{width:200;height:400;ListModel{id:fruitModelListElement{name:"Apple"cost:2.45}ListElement{ name:"Orange"cost:3.25}ListElement{ name:"Banana"cost:1.95}}GridView{anchors.fill:parent model:fruitModel delegate:Column{Text{text:"name"+name} Text{text:"cost"+cost}}}}49.PathView Path看例子Rectangle{width:200;height:400; ListModel{id:fruitModel ListElement{ name:"Apple"cost:2.45}ListElement{ name:"Orange" cost:3.25}ListElement{ name:"Banana" cost:1.95}}PathView{ anchors.fill:parent model:fruitModel delegate:Column{Text{text:"name"+name}Text{text:"cost"+cost}}path:Path{startX:120;startY:100PathQuad{x:120;y:25;controlX:260;controlY:75} PathQuad{x:120;y:100;controlX:-20;controlY:75} }}}50.PathLine具体的看运行的例子Rectangle{width:200;height:400;ListModel{id:fruitModelListElement{name:"Apple"cost:2.45}ListElement{ name:"Orange"cost:3.25}ListElement{ name:"Banana"cost:1.95}}PathView{anchors.fill:parent model:fruitModel delegate:Column{Text{text:"name"+name} Text{text:"cost"+cost}}path:Path{startX:150;startY:120 PathLine{x:200;y:80;} PathLine{x:100;y:80;} PathLine{x:150;y:120;}}}}51.PathQuad参考PathView Path 52.PathCubic还要看53.PathAttribute可以直接针对一些属性进行改变Rectangle{width:200;height:400; ListModel{id:fruitModelListElement{ name:"Apple"cost:2.45ListElement{ name:"Orange" cost:3.25}ListElement{ name:"Banana" cost:1.95}}PathView{ anchors.fill:parent model:fruitModel delegate:Item{id:delitem;width:80;height:80; Column{//这里使用图片试试Rectangle{width:40;height:40; scale:delitem.scale; color:"red"Text{text:"name"+name}Text{text:"cost"+cost}}}//path:Path{startX:120;startY:100PathAttribute{name:"Scale";value:1.0}PathQuad{x:120;y:25;controlX:260;controlY:75} PathAttribute{name:"Scale";value:0.3}PathQuad{x:120;y:100;controlX:-20;controlY:75} }}}54.PathPercent具体请看QML文档55.WebViewimport QtWebKit1.0WebView{url:"" preferredWidth:490preferredHeight:400scale:0.5smooth:false}56 Column横向排列Rectangle{width:100;height:100;//纵向排列Column{spacing:2Rectangle{color:"red";width:50;height:50} Rectangle{color:"green";width:20;height:50} Rectangle{color:"blue";width:50;height:20} }}57 RowRectangle{width:100;height:100;//横向排列Row{spacing:2Rectangle{color:"red";width:50;height:50} Rectangle{color:"green";width:20;height:50} Rectangle{color:"blue";width:50;height:20} }}58 GridRectangle{width:100;height:100;//网格排列Grid{columns:3spacing:2Rectangle{color:"red";width:50;height:50} Rectangle{color:"green";width:20;height:50} Rectangle{color:"blue";width:50;height:20} Rectangle{color:"cyan";width:50;height:50} Rectangle{color:"magenta";width:10;height:10} }}59 FlowRectangle{width:100;height:100;//网格排列Flow{spacing:2width:100;height:100;Rectangle{color:"red";width:50;height:50} Rectangle{color:"green";width:20;height:50} Rectangle{color:"blue";width:50;height:20} Rectangle{color:"cyan";width:50;height:50} Rectangle{color:"magenta";width:10;height:10} }}60 Connections下面是3中情况下会使用的,具体的不好翻译Multiple connections to the same signal are required有多个连接要连接到相同的信号时Creating connections outside the scope of the signal sender 创建的连接在范围之外Connecting to targets not defined in QML创建的连接没有在QML中定义的Rectangle{width:100;height:100;MouseArea{id:areaanchors.fill:parent;}Connections{target:areaonClicked:{console.log("ok");}}}61 Component组件是可以重用的QML元素,具体还是看QML的文档翻译不是很好Item{width:100;height:100//定义一个组件他包含一个10x10的红色矩形Component{id:redSquareRectangle{color:"red"width:10height:10}}//动态的载入一个组件Loader{sourceComponent:redSquare}Loader{sourceComponent:redSquare;x:20}}62 TimerItem{width:200;height:40;//和QTimer差不多Timer{interval:500;running:true;repeat:trueonTriggered:time.text=Date().toString()//使用javascript获取系统时间}Text{id:time}}63 QtObject他是不可见的只有objectName一个属性通过这个属性我们可以在c++中找到我们想要的对象//MyRect.qmlimport Qt4.7Item{width:200;height:200Rectangle{anchors.fill:parentcolor:"red"objectName:"myRect"}}//main.cppQDeclarativeView view;view.setSource(QUrl::fromLocalFile("MyRect.qml"));view.show();QDeclarativeItem*item=view.rootObject()->findChild<QDeclarativeItem*>("myRect"); if(item)item->setProperty("color",QColor(Qt::yellow));64 Qt提供全局有用的函数和枚举,具体的看QML文档65. WorkerScript使用它可以把操作放到一个新的线程中,使得它在后台运行而不影响主GUI 具体可以看QML中它的文档66. Loader可以参考Component还有QML中的文档67 Repeater他可以创建很多相似的组件,QML中还有几个例子Row{Repeater{model:3Rectangle{width:100;height:40border.width:1color:"yellow"}}}。

相关文档
最新文档