QML是一种脚本语言。qt quick是QML语言的库,暂且可以这么理解。
QML用来声明UI元素,并可以做逻辑处理,可以理解为 html + java script,比如在窗体上放置一个按钮:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Button {
text: "I am a Button"
}
}
QML Object
QML的基本概念是QML Object,比如Button就是一个QML Object。可以把QML Object理解为类,有方法(函数)、信号(函数)、槽函数(函数)、属性(public的成员变量),这些东西统称为QML Object Attributes,有如下:
信号 槽
信号的种类一般是三种:
(a)用户输入产生
比如clicked、touch,鼠标、键盘等等。
(b)属性被修改发出的信号
绝大多数属性被修改的时候能够产生名称为 <属性名>Changed 的信号,然后也会有 on<属性名>Changed 的信号处理器
(c)附加信号
附加属性提供的信号,也会有附加信号提供的信号处理器
在qml中槽被称作“信号处理器”,实际还是c++里的槽函数。
在qt实现的很多模块的对象中(比如Button)“信号”一般都会对应一个“信号处理器”命名方式则是on
下图是Button的信号列表(索引中可以看到,实际是button的父类AbstractButton)
比如clicked()就有一个onClick()的“信号处理器”
connect
自定义信号
QML 与 java script
可以在qml文件中定义js函数
也可以把js函数写到单独的文件中,比如main.js,qml文件中的用法如下:
可以把js函数链接到信号: