QML基本语法

QML基本语法
QML基本语法

QML基本语法

QML是什么?

QML 是一中声明式语言,用来描述应用程序接口的――是什么样,有怎样的行为。在QML中,一个用户接口被指定为带有属性的对象是。

这个介绍主要面向只有很少或者没有编码经验的人。在QML中,JavaScript作为一种脚本语言被使用。因此在深入学习QML之前,也许你会想要去学一些关于JavaScript的知识(JavaScript: The Definitive Guide)。另外,对像HTML和CSS这样的网页技术有一些基础的了解也是相当有帮助的,但这些都不是必须的。

QML 的基本语法

QML看起来像这样

1.import Qt 4.7

2.Rectangle {

3. width: 200

4. height: 200

5. color: "blue"

6.

7. Image {

8. source: "pics/logo.png"

9. anchors.centerIn: parent

10. }

11.}

复制代码

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

属性可以被一行行指定:

1.Rectangle {

2. width: 100

3. height: 100

4.}

复制代码

同时也可以在一个单行上指定多个属性:

1.Rectangle { width: 100; height: 100 }

复制代码

当多个property/value对被指定在一个单行上时,他们需要通过分号来分隔。

import声明是为了导入包含所有标准的QML元素的Qt模块。没有这个导入声明,Rectangle和Image元素都将不能被使用。

表达式

除了直接给属性指定值之外,你也可以像在JavaScript中一样通过表达式来指定。

1.Rotation {

2. angle: 360 * 3

3.}

复制代码

这些表达式可以包含其他对象和属性,这样子的操作将会产生一个绑定关系,当这个表达式的值发生改变时,已经通过表达式指定了的属性的值也会自动更新到那个值。

1.Item {

2. Text {

3. id: text1

4. text: "Hello World"

5. }

6. Text {

7. id: text2

8. text: text1.text

9. }

10.}

复制代码

在上面的这个例子中,text2对象将会显示和text1一样的文字.如果text1改变了,text2也会自动变化为相同的值。

在引用其他对象时,可以通过对象的id 值,来进行引用。

QML注释

QML中的注释方式和Javascript 的相同。

单行注释使用//;

多行注释使用/* … */ 。

1.Text {

2. text: "Hello world!"/*print text*/

3. //opacity: 0.5

4.}

复制代码

属性

属性命名

属性通常以小写字符开头(附加属性除外)

属性类型

QML支持多种属性(具体参看QML Basic Types)。基本的属性包括 int, real, bool, string, color和lists。

1.Item {

2. x: 10.5 // a 'real' property

3. ...

4. state: "details" // a 'string' property

5. focus: true // a 'bool' property

6.}

复制代码

QML的属性是属于类型安全的,也就是说属性的类型必须和所分配的值是相同的。例如,Item的x属性是一个real,如果你想要给他分配一个string值,就会得到一个错误。

1.Item {

2. x: "hello" // illegal!

3.}

复制代码

id属性

每个对象都可以指定一个专门的属性叫做id,这个属性的值必须是唯一的。在同一个QML文档中不能有相同的id值。通过指定一个唯一可用的id,对象就可以被其他对象和脚本引用。

1.Item {

2. Rectangle {

3. id: myRect

4. width: 100

5. height: 100

6. }

7. Rectangle {

8. width: myRect.width

9. height: 200

10. }

11.}

复制代码

ps:id必须以小写字母或者下划线开头,并且不能包含除字母、数字和下划线以外的其他字符。

List属性

List属性看起来像这样

1.Item {

2. children: [

3. Image {},

4. Text {}

5. ]

6.}

复制代码

list有包含在方括号,list中的属性以逗号来分隔。如果只有一个属性,可以省略方括号。

1.Image {

2. children: Rectangle {}

3.}

复制代码

缺省属性

每个对象类型可以指定一个list或者或者对象属性作为缺省属性。如果一个属性已经被声明为缺省属性,那么该属性的标签就可以被省略。

示例代码

1.State {

2. changes: [

3. PropertyChanges {},

4. PropertyChanges {}

5. ]

6.}

可以被简化为

1.State {

2. PropertyChanges {}

3. PropertyChanges {}

4.}

复制代码

因为changes是State类型的缺省属性。

组属性

在一些示例中属性会构成一个逻辑上的小组,并且通过点(“.”)或者组标记去使用它。

组属性可以被写成以下形式:

1.Text {

2. font.pixelSize: 12

3. font.bold: true

4.}

复制代码

或者

1.Text {

2. font { pixelSize: 12; bold: true }

3.}

复制代码

附加属性

附加属性的意思就是通过一些对象附加一些属性到另一个对象上。附加属性的格式如Type.property,在这里Type是这个附加属性元素的类型。

https://www.360docs.net/doc/8717683678.html,ponent {

2. id: myDelegate

3. Text {

4. text: "Hello"

5. color: ListView.isCurrentItem ? "red" : "blue"

6. }

7.}

8.ListView {

9. delegate: myDelegate

10.}

ListView元素附加ListView.isCurrentItem这个属性到它创建的每一个对象中。

另一个附加属性的例子是Keys元素通过附加属性来处理任何可见Item的key press事件,例如:

1.Item {

2. focus: true

3. Keys.onSelectPressed: console.log("Selected")

4.}

复制代码

信号处理器

信号处理器允许通过事件来响应动作。举个例子来说,MouseArea元素拥有信号处理器来处理鼠标press、release 和click:

1.MouseArea {

2. onPressed: console.log("mouse button pressed")

3.}

复制代码

所有的信号处理器都是以“on”开头的。

一些信号处理器还包含有选项参数,例如MouseArea onPressed这个信号处理器就有mouse这个参数:

1.MouseArea {

2. acceptedButtons: Qt.LeftButton | Qt.RightButton

3. onPressed: if (mouse.button == Qt.RightButton) console.log("Right mouse button pressed")

4.}

复制代码

Qt实现自定义按钮的三态效果

Qt实现自定义按钮的三态效果 好久之前做的一个小软件,好长时间没动过了,在不记录下有些细节可能都忘了,这里整理下部分功能的实现。按钮的三态,指的是普通态、鼠标的停留态、点击态,三态是界面交互非常基本的一项功能,Qt中如果使用的是原始的按钮,三态的效果是有的,鼠标放上去会变色,点击的时候有凹陷的效果,工具栏中的图标也具备三态效果,但是如果自定义的图标这个效果就没有了。下面整理下自定义按钮图标的方法,先看下我做的效果图:图中表示了鼠标放在按钮上和按下的效果,完成了基本的三态,下面说下我的具体实现过程。资源准备首先要准备好对应状态的按钮图标,按钮图标可以从网上搜集,图标需要找png格式的,ico格式的可以使用工具转换为png格式的,而且是背景透明的png格式,要想实现不同状态对应不同的效果还需要处理出其他状态,这就得靠PS来完成了,使用PS也非常简单,我这里使用PS的内阴影来实现按下的效果,用斜面和浮雕来实现鼠标停留效果。具体设置如下面两幅图所示:图:使用内阴影实现的按下效果图:使用斜面和浮雕实现的鼠标停留效果处理好后的图标如下图。加入工程将处理好的图标文件放入工程文件夹下,新建Qt-Qt资源文件。输入文件名保存并加入工程。依次添加前缀,添加文件将文件

加入工程,如下图所示。这些文件添加到工程后就可以在界面设计中使用,很多人在界面设计中改变按钮的样式会直接选择按钮图标,如下图所示。通过选择按钮的icon设置对应大小来实现,然而这样的一个效果就是按钮仍然是有背景和边框的,效果如下图所示。因此很多人的实现方法是通过继承QToolButton或者重绘按钮来实现,然而这些操作仍然相对麻烦,经过对比和查找,这里使用StyleSheet来实现。找到对应的按钮,先在界面编辑中编辑对应的样式表,这里添加border-image,对应普通情况下的按钮图标。然后在主程序中在按钮使用之前指定其他两种状态所对应的图标,代码非常直接,就是指定每种状态对应的文件,QPushButton:hover标示鼠标悬停所对应的状态,QPushButton:pressed则对应鼠标点击的状态,代码如下,注意包含的头文件。#include ui->play_button->setStyleSheet("QPushButton{border-ima ge: url(:/new/icons/icons/play-pause.png);}" "QPushButton:hover{border-image: url(:/new/icons/icons/play-pause-hover.png);}" "QPushButton:pressed{border-image: url(:/new/icons/icons/play-pause-pressed.png);}");

八键鼠标自定义办公按键操作步骤

以定义办公常用按键为例介绍自定义用法: 一、双击配置具图标,如图,打开配置工具页面如下图 二、下面可以开始我们的自定义之旅吧: 进入界面后,首先我们要读取设备参数,这时配置软件会自动读取鼠标的 参数点击确认, 我们现在以办公常用键来自定义这款鼠标的按键, 正常情况,我们的鼠标左,右键和滚轮(中键)不需要重新定义,我们就将“Back”键“Forward”键和“DPI 循环切换键”, 自定义为办公软件经常用到的是“Ctrl C”组合键“Ctrl V” 组合键和快捷方式“打开默认邮件主页”

我们先来将“Forward”键,定义为“Ctrl V”,在按键定义区域找到“Forward”键, 在右下角箭头下拉选项中选中“Ctrl V”键, 如下图:

选中后按左键确认,变成如图示 再来将“Back”键,定义为“Ctrl C”, 在按键自定义区域找到“Back”键,在右 在右下角箭头下拉选项选中“Ctrl C”键,如图: 选中后按左键确认, 变成如图示

现在我们将“DPI 循环切换键”键,定义为“打开默认邮件主页”, 在按键自定义区域找到 “DPI 循环切换键”键, 在右下角箭头下拉选项选中 “打开默认邮件主页”,如图: 选中后按左键确认,变成如图示 最后我们将“免双击键”键, 定义为“打开我的电脑”, 在按键自定义区域找到 “免双击键”键, 在右下角箭头下拉选项选中 “打开我的电脑”,如图 选中后按左键确认,变成如图示

现在四个按键设置完毕后,点击右上角 ,出现如下对话框, 出现如下对话框,点击“确定” 鼠标会自动重启,重启后按键功能定义完成。 现在我们来对比一下定义前,定义后的按键功能图:定义前功能键

Android自定义Button按钮

Android自定义Button按钮 Android自定义Button按钮主要可以分成两种形式: 1.通过自定MyButton类来继承Button,将所有效果在类中实现. 2.通过xml文件来改变Button的样式和颜色. 今天我就先讲通过xml文件,稍后封装自定义Button类再补上. TestcActivity [html] package com.example.blueapp;n import android.app.Activity;n import android.os.Bundle;n public class TestcActivity extends Activity {n nnn @Overriden nnn protected void onCreate(Bundle savedInstanceState) {n nnnnnnn // TODO Auto-generated method stubn nnnnnnn super.onCreate(savedInstanceState);n nnnnnnn setContentView(https://www.360docs.net/doc/8717683678.html,yout.testc);n nnn }n }n package com.example.blueapp; import android.app.Activity; import android.os.Bundle; public class TestcActivity extends Activity { n@Override nprotected void onCreate(Bundle savedInstanceState) { nn// TODO Auto-generated method stub nnsuper.onCreate(savedInstanceState); nnsetContentView(https://www.360docs.net/doc/8717683678.html,yout.testc); n} } testc.xml [html] n n nnnnn nnn n nnnnn nnn n n nnn nnn