QML学习(三) QML 的基本语法介绍
QML语言是基于Javascript语言的,其实,QML基本跟JS语言一致,所以,想要了解QML的语法,基本上了解JS的语法也可以。
QML基本结构:QML 文档以.qml 为扩展名,基本结构是由一系列对象声明组成,每个对象可以包含属性、信号、方法等。对象之间可以嵌套,形成层次结构,用于表示用户界面的布局和组件关系。举个例子:
import QtQuick 2.15
Rectangle {
width: 200
height: 200
color: "#ccffcc"
}
导入语句:位于 QML 文档顶部,用于加载所需的模块、类型或脚本。格式通常为 import <VersionMajor.VersionMinor> 或 import “directory” 或 import “file.js” as 等。
例如:上面例子中“import QtQuick 2.15” 表明导入导入 QtQuick 模块的 2.15 版本;“import QtQuick 2.0” 就是导入 QtQuick 模块的 2.0 版本。
对象声明:基本形式为:
对象类型 {
属性名: 值
方法名: 函数体
信号名: 信号处理函数
}
可以在花括号内定义对象的属性、方法和信号等。对象可以嵌套,形成层次结构。例如:
Rectangle {
width: 100
height: 100
color: "red"
Text {
anchors.centerIn: parent
text: "Hello"
}
}
对象声明与实例化:通过指定对象类型和属性来创建对象实例,对象类型可以是 Qt Quick 提供的内置类型,如 Rectangle、Text、Button 等,也可以是自定义的类型。例如:
Button {
text: "Click Me"
onClicked: {
// 按钮点击时的处理逻辑
}
}
属性赋值与绑定:使用 “属性名:值” 的形式为对象的属性赋值,可以是简单的值,如数字、字符串、布尔值等,也可以是表达式或其他对象的属性。例如:
Rectangle {
width: 100
height: width * 2 // 高度绑定到宽度的两倍
color: "red"
}
举一个比较详细的例子来说明属性
import QtQuick 2.15
import QtQuick.Controls 2.15
Window {
visible: true
width: 640
height: 480
title: "Custom Button Example"
// 包含下面自定义按钮
CustomButton {
anchors.centerIn: parent
}
}
Button {
//按钮的ID,必须是唯一,可被其他地方调用的
id: customButton
// 按钮显示的文本
text: "Click Me"
// 按钮的宽度
width: 150
// 按钮的高度
height: 50
// 按钮的背景颜色
background: Rectangle {
color: "lightblue"
}
// 按钮的文本颜色
color: "white"
// 按钮按下时的背景颜色
pressedBackground: Rectangle {
color: "blue"
}
// 按钮的字体大小
font.pixelSize: 20
// 按钮的边框颜色
border.color: "black"
// 按钮的边框宽度
border.width: 2
// 按钮是否可点击
enabled: true
// 按钮是否可见
visible: true
// 按钮的鼠标悬停效果
hoverEnabled: true
// 鼠标悬停时的背景颜色
hoverBackground: Rectangle {
color: "darkblue"
}
// 按钮的点击事件处理函数
onClicked: {
console.log("Button clicked")
}
}
如果对一些属性名称不熟悉,可以参考QML中常用属性说明
信号与槽机制:通过信号和槽机制实现对象之间的事件通信和交互。一个对象可以发出信号,其他对象可以连接到该信号的槽来响应信号。例如:
Button {
text: "Click Me"
onClicked: {
console.log("Button clicked")
}
}
JavaScript 嵌入:QML 支持在其中嵌入 JavaScript 代码,可以在属性绑定、信号处理函数、方法等中使用 JavaScript 语法和逻辑。例如:
Rectangle {
width: 100
height: 100
color: "black"
function changeColor() {
if (color === "black") {
color = "red"
} else {
color = "black"
}
}
MouseArea {
anchors.fill: parent
onClicked: {
changeColor()
}
}
}
原文地址:https://blog.csdn.net/qianniulaoren/article/details/144788310
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!