QML基本“.NET研究”语法
2011-10-20 21:57 狼人:-) 阅读(316) 评论(0) 编辑 收藏 举报QML是什么?
QML 是一中声明式语言,用来描述应用程序接口的――是什么样,有怎样的行为。在QML中,一个用户接口被指定为带有属性的对象是。
这个介绍主要面向只有很少或者没有编码经验的人。在QML中,JavaScript作为一种脚本语言被使用。因此在深入学习QML之前,也许你会想要去学一些关于JavaScript的知识(JavaScript: The Definitive Guide)。另外,对像HTML和CSS这样的网页技术有一些基础的了解也是相当有帮助的,但这些都不是必须的。
<上海企业网站设计与制作p> QML 的基本语法QML看起来像这样
1 | import Qt 4.7<br> Rectangle {<br> width: 200<br> height: 200<br> color: "blue" <br><br> Image {<br> source: "pics/logo.png" <br> anchors.centerIn: parent<br> }<br> }<br> |
对象是通过类型而直接被指定的,紧随其后的是一对大括号。对象类型总是以大写字母开头。在上面的例子中,存在两个对象Rectangle和Image。在大括号之间,我们可以指定对象的相关信息,例如它的属性。属性是通过“property: value”这样的方式被呈现的。在上面的例子中,我们可以看到Image拥有一个属性叫做source,它被分配了一个值叫做"pics/logo.png"。属性和值被冒号分隔。
属性可以被一行行指定:
1 | Rectangle {<br> width: 100<br> height: 100<br> }<br> |
同时也可以在一个单行上指定多个属性:
1 | Rectangle { width: 100; height: 100 }<br> |
当多个property/value对被指定在一个单行上时,他们需要通过分号来分隔。
import声明是为了导入包含所有标准的QML元素的Qt模块。没有这个导入声明,Rectangle和Image元素都将不能被使用。
上海企业网站制作 表达式
除了直接给属性指定值之外,你也可以像在JavaScript中一样通过表达式来指定。
1 | Rotation {<br> angle: 360 * 3<br> }<br> |
这些表达式可以包含其他对象和属性,这样子的操作将会产生一个绑定关系,当这个表达式的值发生改变时,已经通过表达式指定了的属性的值也会自动更新到那个值。
1 | Item {<br> Text {<br> id: text1<br> text: "Hello World" <br> }<br> Text {<br> id: text2<br> text: text1.text<br> }<br> }<br> |
在上面的这个例子中,text2对象将会显示和text1一样的文字.如果text1改变了,text2也会自动变化为相同的值。
在引用其他对象时,可以通过对象的id 值,来进行引用。
QML注释
QML中的注释方式和Javascript 的相同。
单行注释使用//;
多行注释使用 /* … */ 。
1 | Text {<br> text: "Hello world!" /*print text*/ <br> //opacity: 0.5<br> }<br> |
属性
属性命名
属性通常以小写字符开头(附加属性除外)
属性类型
QML支持多种属性(具体参看QML Basic Types)。基本的属性包括 int, real, bool, string, color和lists。
1 | Item {<br> x: 10.5 // a 'real' property<br> ...<br> state: "details" // a 'string' property<br> focus: true // a 'bool' property<br> }<br> |
QML的属性是属于类型安全的,也就是说属性的类型必须和所分配的值是相同的。例如,Item的x属性是一个real,如果你想要给他分配一个string值,就会得到一个错误。
1 | Item {<br> x: "hello" // illegal!<br> }<br> |
id属性
每个对象都可以指定一个专门的属性叫做id,这个属性的值必须是唯一的。在同一个QML文档中不能有相同的id值。通过指定一个唯一可用的id,对象就可以被其他对象和脚本引用。
1 | Item {<br> Rectangle {<br> id: myRect<br> width: 100<br> height: 100<br> }<br> Rectangle {<br> width: myRect.width<br> height: 200<br> }<br> }<br> |
ps:id必须以小写字母或者下划线开头,并且不能包含除字母、数字和下划线以外的其他字符。
List属性
List属性看起来像这样
1 | Item {<br> children: [<br> Image {},<br> Text {}<br> ]<br> }<br> |
缺省属性
每个对象类型可以指定一个list或者或者对象属性作为缺省属性。如果一个属性已经被声明为缺省属性,那么该属性的标签就可以被省略。
示例代码
1 | State {<br> changes: [<br> PropertyChanges {},<br> PropertyChanges {}<br> ]<br> }<br> |
可以被简化为
1 | State {<br> PropertyChanges {}<br> PropertyChanges {}<br> }<br> |
因为changes是State类型的缺省属性。
组属性
在一些示例中属性会构成一个逻辑上的小组,并且通过点(“.”)或者组标记去使用它。
组属性可以被写成以下形式:
1 | Text {<br> font.pixelSize: 12<br> font.bold: true <br> }<br> |
或者
上海闵行企业网站设计与制作>
1 | Text {<br> font { pixelSize: 12; bold: true }<br> }<br> |
附加属性
附加属性的意思就是通过一些对象附加一些属性到另一个对象上。附加属性的格式如Type.property ,在这里Type是这个附加属性元素的类型。
1 | Component {<br> id: myDelegate<br> Text {<br> text: "Hello" <br> color: ListView.isCurrentItem ? "red" : "blue" <br> }<br> }<br> ListView {<br> delegate: myDelegate<br> }<br> |
ListView元素附加ListView.isCurrentItem这个属性到它创建的每一个对象中。
另一个附加属性的例子是Keys元素通过附加属性来处理任何可见Item的key press事件,例如:
1 | Item {<br> focus: true <br> Keys.onSelectPressed: console.log( "Selected" )<br> }<br> |
信号处理器
信号处理器允许通过事件来响应动作。举个例子来说,MouseArea元素拥有信号处理器来处理鼠标press、release和click:
1 | MouseArea {<br> onPressed: console.log( "mouse button pressed" )<br> }<br> |
所有的信号处理器都是以“on”开头的。<上海网站建设/p>
一些信号处理器还包含有选项参数,例如MouseArea onPressed这个信号处理器就有mouse这个参数:
1 | MouseArea {<br> acceptedButtons: Qt.LeftButton | Qt.RightButton<br> onPressed: if (mouse.button == Qt.RightButton) console.log( "Right mouse button pressed" )<br> }<br> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南