QML基础语法2

函数

函数格式:

function关键字 函数名(参数名1:参数类型,参数名2:参数类型,...):返回值类型{}

其中:

  • 函数名必须以小写字符开头,后面驼峰
  • 可以有多个参数或者没有参数
  • 参数类型可以不写
  • 返回值类型也可以不写

如何调用:通过id点出来

举例:

Rectangle {id: rect//显示指定参数类型和返回值类型function getWidth(num1: int, num2: int): int {return num1 + num2;}//不显示指定function getHeight(num1, num2) {return num1 * num2;}//调用width: rect.getWidth(10, 20)height: rect.getHeight(1, 20)
}

信号

信号格式:

signal关键字 信号名(参数名1:参数类型,参数名2:参数类型...)

其中:

  • 信号名仍然要首字母小写,后面驼峰
  • 参数可以有多个或没有
  • 若有参数则参数类型必须要写
  • 同一个作用域内信号名要唯一,不能多个信号重名

举例:

Rectangle {id: rect2width: 100height: 50color: "red"//声明1个信号signal testSignal(num: int)
}

自动绑定信号的槽函数

定义一个信号号,同时可以定义一个自动绑定信号的槽函数

自己发出信号,自己接收信号然后处理

格式为:

on信号名(参数列表){}

其中:

  • 信号名的首字母要变成大写
  • 参数的个数可以少于信号的个数,也可以多于信号的参数
  • 参数不能加参数类型,只需要参数名

举例:

Rectangle {id: rect2width: 100height: 50color: "red"//声明1个信号signal testSignal(num: int)//on+信号名首字母大写//信号处理函数中打印这个参数onTestSignal: (num) => {print(num);}//槽函数参数可以没有,也可以多与信号// onTestSignal:(num1,num2)=>{//     print(num1);// }// onTestSignal:{//     //没有参数时,即忽略信号里的参数,不使用//     print("----");// }//点击这个矩形,发射信号MouseArea {anchors.fill: parentonClicked: rect2.testSignal(10)}}

属性改变信号处理器

自定义一个属性后,qml会自动生成这个属性改变的处理器(槽函数)

同样是自己发出属性改变信号,自己接受信号处理

格式:

on属性名Changed:{}

其中:

  • 属性名要变成大写开头

举例:

Rectangle {id: rect3width: 100height: 50color: "red"//声明属性numproperty int num: 10//自动生成的属性变化处理器onNumChanged: {print("num属性变化了,num:" + rect3.num)}//点击后修改这个属性,对应的处理器就会自己调用MouseArea {anchors.fill: parentonClicked: rect3.num++}
}

connect函数

可以 将自己的信号 连接到 在其他元素中定义的槽函数

自己发出信号,由其他对象接受信号进行处理

通常会在元素创建完成后Component.onCompleted中,将信号和槽函数进行连接

此方法连接信号和槽,对槽函数的名称没有要求

举例:

Rectangle {id: rect4width: 100height: 50color: "red"//定义信号signal testSignal(w: int)MouseArea {anchors.fill: parentonClicked: rect4.testSignal(rect4.width)}//通常在元素创建完成之后将信号与对应的槽函数进行连接Component.onCompleted: {//信号调用connect方法连接到其他元素中的槽函数rect4.testSignal.connect(rect5.doSomething)}
}
Rectangle {id: rect5width: 100height: 50color: "yellow"//定义槽函数function doSomething(w: int) {print("4号矩形的宽度是:" + w)}
}

Connections元素

可以 将其他元素中的信号自己的槽函数进行连接

Connections元素的写法:

Connections {//需要指定target,即连接谁的信号target: 某个元素的id//可以在Connections同时连接多个信号function on信号名(){}
}

槽函数格式为:

和普通函数一样,只是名称有要求

function关键字 on信号名(参数名1:参数类型,参数名2:参数类型,...):返回值类型

其中:

  • 信号名的首字母要变成大写

举例:

Rectangle {id: rect6width: 100height: 50color: "red"signal mySignal1(info: string)signal mySignal2()//点击发射信号MouseArea {anchors.fill: parentonClicked: {rect6.mySignal1("你好")rect6.mySignal2()}}
}
Rectangle {id: rect7width: 100height: 50color: "blue"//连接rect6中的信号Connections {//需要指定target,即连接谁的信号target: rect6//可以在Connections同时连接多个信号//连接rect6中的mySignal1信号function onMySignal1(info: string) {print(info)}//连接rect6中的mySignal1信号function onMySignal2() {print("响应rect2中的mySignal2信号")}}
}

注意connect函数Connections元素区别

  • 前者是将自己的信号连接其他元素的槽函
  • 后者是将自己的槽函数连接到其他元素中的信号 

基本数据类型

其中:

color,font,rect,point如何赋值:

property color c: "#FF112233" //ARGB,前面两位那个是透明度
property point p: Qt.point(50, 100)
property rect r: Qt.rect(50, 50, 100, 100)
property font f: ({family: "微软雅黑"
}) //js对象
property font ff: Qt.font({family: "微软雅黑",bold: true
})

枚举类型注意点:

  • 自定义的qml文件的名称需要首字母大写,定义的枚举无法在当前qml文件中使用和访问
  • 当前qml文件中只能使用其他qml文件中定义的枚举
  • 枚举名需要首字母大写,枚举值也要首字母大写
  • 访问格式:qml文件名.枚举类型名.枚举值

举例:

MyItem.qml文件中定义了枚举Week

Item {width: 100height: 100enum Week{Mon=1,Tue=2}
}

在另一个qml文件中使用

Rectangle{width:100    height:100//定义了一个属性,并赋枚举值property int week:MyItem.Week.Mon
}

其他类型

qml自带的或者自己定义的这些元素类型

Rectangle {width: 100height: 100//定义了一个属性,属性的类型是自己定义的元素property MyItem myitem: MyItem {width: 100}//定义了一个属性,属性的类型是qml自带的Buttonproperty Button btn: Button {text: "按钮"}
}

js对象

Rectangle {width: 100height: 100//js里的日期propertyvar datee: new Date()
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 配置SourceTree集成云效

1、背景 工作使用的是自己的笔记本,一个是比较卡,在一个是敏感信息比较多还是使用公司的电脑,但是系统是Mac就很麻烦,在网上找了帖子记录一下 2、配置 打开终端 ssh-keygen -t rsa #一直回车就行 cd .ssh cat id_rsa.pub #查…

Kubernetes中常见的volumes数据卷

华子目录 volumesk8s支持的卷的类型emptyDir卷功能emptyDir的使用场景示例 hostPath卷功能用法安全隐患示例 nfs卷功能应用示例:部署一台nfs服务器并在所有k8s节点中安装nfs-utils volumes 容器中文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序…

PaddleNLP的FAQ问答机器人

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【DDRNet模型创新实现人像分割】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…

【博弈论】分割数游戏

题目描述 有一天 bb和dd玩游戏 你需要帮他们求出每局的胜败情况。 游戏规则是这样的: 每次一个人可以对给出的数进行分割,将其割成两个非零自然数之后,由另一个人选择留下两个数中的其中一个并进行分割剩下的一个数,重复步骤………

发布 NPM 包时,终端显示发布成功但实际上版本并没有更新,可能是由于以下原因

如果发布仍然没有生效,可以检查以下几点: 版本号是否更新: 如果版本号没有更新,NPM 会拒绝发布新的包版本。运行以下命令以确保版本号增加了: bash 复制代码 npm version patch # 更新小版本号 正确的 NPM 注册表&a…

WebStorm技巧

WebStorm:前端开发的加速技巧 🚀 前端工程师们,想不想让你的开发速度快得飞起来?今天我们就来解锁WebStorm中的那些让人惊叹的黑科技! 第一关:环境配置篇 ⚙️ 1. 性能优化设置 // 推荐配置 {"memor…

Windows的MySQL开机自动启动问题

标题 问题描述 问题描述 在Windows系统中,我设置好了MySQL服务为自动启动,但在开机后发现MySQL服务任没有自动运行。我有点苦恼,每次连接MySQL,都要进入计算机管理,手动打开。 解决方法: 1.前提安装好MySQ…

Docker篇(阿里云私服)

目录 一、登录阿里云Docker Registry 二、从Registry中拉取镜像 三、将镜像推送到Registry 四、选择合适的镜像仓库地址 五、示例 一、登录阿里云Docker Registry docker login --usernameww163.com registry.cn-qingdao.aliyuncs.com 用于登录的用户名为阿里云账号全名&…

基于Spring Boot的私房菜定制上门服务系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统私房菜定制上门服务系统信息管理难度大,容错率…

计算机毕业设计 | 基于SpringBoot的健身房管理系统(附源码)

1,项目背景 随着人们生活水平的提高和健康意识的增强,健身行业逐渐兴起并迅速发展。而现代化的健身房管理系统已经成为健身房发展的必备工具之一。传统的健身房管理方式已经无法满足现代化健身房的需求,需要一种更加高效、智能、安全的管理系…

Django知识进阶

一、接口文档编写 步骤: 1、学习Markdown语法 2、编写文档公共部分 3、编写接口文档 MD语法入门: 1、# 一级标题 2、## 二级标题 3、引入图片/跳转连接:[超链接名](超链接地址 “超链接title”) 4、引用内容:代码引用 5、列表&#x…

LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)

【LetMeFly】685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图) 力扣题目链接:https://leetcode.cn/problems/redundant-connection-ii/ 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点&…

前端请求后端接口报错(blocked:mixed-content),以及解决办法

报错原因:被浏览器拦截了,因为接口地址不是https的。 什么是混合内容(Mixed Content) 混合内容是指在同一页面中同时包含安全(HTTPS)和非安全(HTTP)资源的情况。当浏览器试图加载非…

wordpress argon主题美化方面

1、页面前端额外CSS: /*字体*/ font-face {font-family: myFont1; src:url(https://blog.yangmumu.com/css/fonts/Dancing.ttf) ;font-display: swap; } font-face {font-family: myFont2; src:url(https://blog.yangmumu.com/css/fonts/Regular.ttf) ;font-displa…

SMTP协议,即简单邮件传输协议

SMTP协议,即简单邮件传输协议(Simple Mail Transfer Protocol),是一种用于发送电子邮件的互联网标准。以下是对SMTP协议的详细介绍: 一、定义与工作原理 SMTP定义了邮件服务器之间以及邮件客户端与服务器之间的通信规…

Xss_less靶场攻略(1-18)

xss-lab-less1 ur特殊字符转义 存在url中 转义符为 %2B& 转义符为 %26空格 转义符为 或 %20/ 转义符为 %2F? 转义符为 %3F% 转义符为 %25#转义符为 %23 转义符为 %3Dimg 标签懒加载 在XSS攻击中,img标签的src属性是一个常见的攻击向量,因为它可以…

git cherry-pick用法详解

git cherry-pick 是 Git 中一个非常有用的命令,它允许你选择一个特定的提交(commit)并将其变更应用到当前分支上。这个功能在你需要将某个分支上的某个或某些特定提交合并到另一个分支时特别有用,而不需要将整个分支合并过去。 基…

【机器学习】回归树

回归树是一种用于数值型目标变量的监督学习算法,通过将特征空间划分为多个区域,并在每个区域内使用简单的预测模型(如区域均值)来进行回归。回归树以“递归划分-计算区域均值”的方式逐层生成树节点,最终形成叶节点预测…

Unity humanoid 模型头发动画失效问题

在上一篇【Unity实战笔记】第二十二 提到humanoid 模型会使原先的头发动画失效,如下图所示: 头发摆动的是generic模型和动画,不动的是humanoid模型和动画 一开始我是尝试过在模型Optimize Game objects手动添加缺失的头发骨骼的,奈…

基于MATLAB的战术手势识别

手势识别的研究起步于20世纪末,由于计算机技术的发展,特别是近年来虚拟现实技术的发展,手势识别的研究也到达一个新的高度。熵分析法是韩国的李金石、李振恩等人通过从背景复杂的视频数据中分割出人的手势形状,然后计算手型的质心…