【QML-语法】

QML编程指南 VX:hao541022348

  • ■ 绑定
  • ■ 弱类型
  • ■ Basic Types(基本类型)
    • ■ var
    • ■ Undefined
    • ■ Null
    • ■ Boolean
    • ■ Number
    • ■ String
  • ■ 变量命名规则
  • ■ 类型转换
    • ■ 转换成字符串
    • ■ 字符串转换成数字 parselnt() 和 parseFloat()
  • ■ 强制类型转换
  • ■ 函数 function
  • ■ 运算符 void、typeof、instanceof、new、delete
    • ■ void
    • ■ typeof
    • ■ instanceof
    • ■ new
    • ■ delete
  • ■ 关键字
    • ■ Q_INVOKABLE
    • ■ explicit
    • ■ Q_PROPERTY
    • ■ NOTIFY

■ 绑定

: 是绑定, 不是=(赋值)就像C++引用一样。
注释 和c语言一样// /**/
source : “…/image/background.png” //url
parent //父窗口
Behavior //行为
qsTr() 用来翻译的类似 tr()

// main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
 
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
}

每一个 QML 有且只有一个根元素,类似于 XML 文档。这个根元素就是这个 QML 文档中定义的 QML 元素,在这个例子中就是一个 Window 对象。

■ 弱类型

定义变量时只用 var 运算符,可以将它初始化为任意的值,你可以随时改变变量所存储的数据类型

var i = 0
console.log(i)
i = "hello"
console.log(i)

■ Basic Types(基本类型)

■ var

QML对象类型是指具有properties, signals, methods等的对象。 (属性,信号,方法)
var:可以引用任何数据类型的通用属性类型。

Item {
      property var aNumber: 100
      property var aBool: false
      property var aString: "Hello world!"
      property var anotherString: String("#FF008800")
      property var aColor: Qt.rgba(0.2, 0.3, 0.4, 0.5)
      property var aRect: Qt.rect(10, 10, 10, 10)
      property var aPoint: Qt.point(10, 10)
      property var aSize: Qt.size(10, 10)
      property var aVector3d: Qt.vector3d(100, 100, 100)
      property var anArray: [1, 2, 3, "four", "five", (function() { return "six"; })]
      property var anObject: { "foo": 10, "bar": 20 }
      property var aFunction: (function() { return "one"; })
  }

■ Undefined

当声明的变量未初始化时,该变量的默认值就是 undefined

■ Null

Null 类型也只有一个值,即 null。

■ Boolean

它有 true 和 false 两个值。

■ Number

Number 类型是最特殊的,它既可以表示 32 位的整数,也可以表示 64 位的浮点数。

■ String

它存储 Unicode 字符,对应的 Qt C++ 类型为 QString。
var name = ‘Lv Bu’ //单引号(')来声明
var name = “Guan Yu” //双引号(")

Rectangle {
	Component.onCompleted:{
		var name = "Zhang San Feng"
        console.log(typeof name) // 输出:qml:string
        console.log(typeof 60) // 输出:qml:number
	}
}
变量 name 的类型是 string,
字面量 60 的类型是 number。
其中 “qml:” 是使用 console.log 输出信息时携带的前缀。

■ 变量命名规则

第一个字符必须是字母、下画线(_)或美元符号($)。
余下的字符可以是下画线、美元符号或者任何字母或数字字符。

var test
var objectName
var —phone
var $1

■ 类型转换

■ 转换成字符串

Boolean、Number、String 三种原始类型,都有 toString() 方法,可以把它们的值转换为字符串

var name = "Zhang San Feng"
console.log(name.toString())
console.log(true.toString())
var visible = false
console.log(visible.toString())
var integer = 3.14159
console.log(integer.toString())

Number 类型的 toString() 方法还可以按基转换,比如:
var integer = 13
console.log (integer.toString(16)) // 输出: D

■ 字符串转换成数字 parselnt() 和 parseFloat()

parselnt() 和 parseFloat() 可以把非数字的原始值转换成数字,前者把值转换为整数,后者把值转换成浮点数。这两个方法只能用于 String 类型,如果你对其他类型调用它们, 返回值将是奇葩的 NaN。
parselnt() 和 parseFloat() 会扫描字符串,直到遇到第一个非数字字符时停止将转换的结果返回。
比如
parselnt(”2014年")将会返回 2014。
parseFloat(),会将第一个小数点作为有效字符,而 parselnt() 则不会。

var numl = parselnt ("2014 年") // 输出:2014
var num2 = parselnt ("OxC") // 输出:12
var num3 = parselnt ("3.14") // 输出:3
var num4 = parselnt ("green") // 输出:NaN_
var num5 = parseFloat ("3.14159") // 输出:3.14159
var num7 = parseFloat ("Am I Float") // 输出:NaN

parselnt() 还支持基模式,
var numl = parselnt ("AK47", 16) // 输出:10
var num2 = parselnt ("AK47", 10) // 输出:NaN
var num3 = parselnt ("010", 8) // 输出:8
var nun4 = parselnt ("010", 10) // 输出:10

■ 强制类型转换

Boolean(value),把 value 转换成 Boolean 类型。
Number(value),把value转换为数字(整数或浮点数)。
String(value), 把value转换成字符串。

■ 函数 function

function functionName(arg1, arg2, ..., argN){
	// 要执行的代码
}

默认都是有返回值的,即便你没有显式使用 return 语句,它也会返回 undefined。如果你想把函数运算的结果返回给调用它的地方,可以使用 return 语句
function add(numberl, number2){
	var result = number1 + number2;
	console.log(number1, "+" ,number2, result);
	return result;
}

■ 运算符 void、typeof、instanceof、new、delete

■ void

运算符比较特殊,它放在一个表达式前,舍弃表达式的值,返回 undefined。

■ typeof

前面讲过了,对于原始值,返回原始类型;对于引用值,返回 object。
这导致你无法准确判断一个对象的引用类型,所以 ECMAScript 引入了 instanceof 运算符。

■ instanceof

用来测试一个对象的实际类型,你需要显式指定要测试的类型。
var str = new String (“hello world”);
console.log (str instanceof String); // 输出:true

■ new

运算符用来创建一个对象,前面用了很多次了,不再赘述。

■ delete

运算符比较特别,在 QML 中,一般它只能删除一个对象内由你定义的属性,而框架定义的那些核心属性,多数是你不能删除的。
我们在 ECMAScript 中调用 delete 多数时候是解除对对象的引用,以免老有人引用某个对象而导致它逍遥法外。

■ 关键字

■ Q_INVOKABLE

Q_INVOKABLE void systemReboot();

■ explicit

关键字explicit可以阻止隐式转换的发生.

explicit Beep(QObject *parent = 0); 

■ Q_PROPERTY

Q_PROPERTY(QString sysVolume READ sysVolume NOTIFY sysVolumeChanged)

■ NOTIFY

在这里插入代码片

你可能感兴趣的:(#,Qml,qt)