0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么需要将QML的属性导出呢

工程师邓生 来源:嵌入式小生 作者:iriczhao 2022-09-14 09:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

为什么需要将属性导出

在进行QML应用开发时,很多时候都是以组件的形式规划软件的,然而一个组件又由许多子元素组成和描述。当我们需要从一个组件引用另一个组件的属性时,这时候就需要将被引用组件的属性导出。例如:当一个组件是由数据驱动的,那么就必须将被数据驱动的属性导出,供其他组件引用使用和修改。

属性导出

将一个组件的属性导出,有两种形式:

(1)自定义属性。

(2)属性别名。

为一个组件类型自定义属性,其语法格式为:

【readonly】property 【:

property是固定写法。

:表示属性的类型。目前支持的属性类型可以是QML基本类型(bool、double、int、list、real、string、url);可以是QML对象类型;也可以使用var指定的泛型类型。

:表示属性名称。属性名称必须以小写字母开头,且只能包含字母、数字和下划线

:表示属性值,可以是静态值或将其绑定到动态表达式。

自定义的属性默认有一个属性值改变信号,我们可以使用onChanged信号处理程序来接收该信号,例如下列代码:

propertyaliaslabel:labelText.text
propertycolortint:"blue"
onLabelChanged:console.log("aliasLabelChanged")
onTintChanged:console.log("tintChanged")

上述代码中,onLabelChanged信号处理程序用于接收label的改变信号;onTintChanged用于接收Tint的改变信号。

为一个组件定义一个属性别名,写法如下所示:

[default]propertyalias:

property alias是标准写法,不能更改。

:是导出属性的别名。其他组件则通过该名称引用到对应的属性。

:指别名引用。

声明属性别名与普通的属性定义类似,只是它需要alias关键字而不是属性类型,并且属性声明的右侧必须是一个有效的别名引用。

例如:

propertyaliasbutton:item.button

上述代码中,别名则是指item组件实例中的按钮组件实例。

在 Qt Design Studio和QtCreate设计模式中,我们可以使用Navigator中的(Export)按钮将组件导出为具有有效别名引用的属性名:

01748538-33c8-11ed-ba43-dac502259ad0.png

注:导出的属性可以在『Connections』视图下的Properties中查看。

注:在其他文件代码中使用的组件必须导出为属性。

注:在QtCreator设计模式下导出组件属性的方法与Qt Design Studio是一样的。

一个实例

看一个具体实例,下面代码是自定义的一个按钮(Button):

importQtQuick2.0

Item{
id:container

propertyaliaslabel:labelText.text

propertycolortint:"blue"
signalclicked

width:labelText.width+70;height:labelText.height+18

BorderImage{
anchors{fill:container;leftMargin:-6;topMargin:-6;rightMargin:-8;bottomMargin:-8}
source:'images/box-shadow.png'
border.left:10;border.top:10;border.right:10;border.bottom:10
}

Image{anchors.fill:parent;source:"images/cardboard.png";antialiasing:true}

Rectangle{
anchors.fill:container;color:container.tint;visible:container.tint!=""
opacity:0.25
}

Text{id:labelText;font.pixelSize:15;anchors.centerIn:parent}

MouseArea{
anchors{fill:parent;leftMargin:-20;topMargin:-20;rightMargin:-20;bottomMargin:-20}
onClicked:container.clicked()
}
}

上述代码中,自定义按钮的height、width参数由labelText标签文本来确定,然后创建一个Rectangle用于显示按钮颜色,创建MouseArea用于接收鼠标的点击事件,并定义了一个clicked信号:

signalclicked

在MouseArea类型的点击事件处理程序中发出该信号:

MouseArea{
anchors{fill:parent;leftMargin:-20;topMargin:-20;rightMargin:-20;bottomMargin:-20}
onClicked:container.clicked()
}

使用Image类型导入一张图片,作为按钮的背景:

Image{anchors.fill:parent;source:"images/cardboard.png";antialiasing:true}

因为按钮的文本和颜色需要被其他组件类型控制(即,在其他组件的属性绑定或逻辑处理中需要改变按钮的文本和颜色值),所以添加了一个颜色属性(用于表示按钮的颜色)和label别名(引用labelText元素的text属性):

//label别名
propertyaliaslabel:labelText.text

//颜色属性
propertycolortint:"blue"

通过上述代码,将属性导出后,在其他组件类型中则可通过label和tint访问按钮组件内的属性。

在设计中,有效的别名引用有以下几个特性(以上述例子中代码为例):

(1)只能指向声明了属性别名的组件中的组件实例或属性。

(2)不能包含JavaScript表达式。例如下列写法是错误的:

propertyaliaslabel:console.log("clicked")

(3)除了声明属性别名的组件外,不能指向其他类型的组件。

(4)不能指向附加的属性。

在别名引用的写法格式上,别名引用必须指定为:...

以下几种写法都是错误的:

propertyaliaslabel:myName
propertystringmyName:"iriczhao"

上述代码位置交换一下也是错误的。下列从根元素(container为根元素的id)引用的写法也是错误的:

propertystringmyName:"iriczhao"
propertyaliaslabel:container.myName

(5)不能引用深度超过3层的嵌套属性。例如下列错误的用法:

//该属性引用将不能正常工作
propertyaliascolor:myItem.myRect.border.color

Item{
id:myItem
propertyRectanglemyRect
}



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据驱动
    +关注

    关注

    0

    文章

    171

    浏览量

    12810

原文标题:qml属性导出

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LM555QML定时器:功能特性、应用及设计要点

    LM555QML定时器:功能特性、应用及设计要点 在电子设计领域,定时器是一种常用的器件,可用于生成精确的时间延迟或振荡。TI公司的LM555QML定时器就是这样一款高度稳定的器件,下面我们来详细
    的头像 发表于 02-10 15:40 296次阅读

    德州仪器LM117QML/LM117QML - SP可调稳压器深度解析

    德州仪器LM117QML/LM117QML - SP可调稳压器深度解析 在电子工程领域,稳压器是电源设计中不可或缺的组件,它能够为电路提供稳定的电压输出,确保系统的正常运行。德州仪器(TI
    的头像 发表于 02-06 11:30 432次阅读

    深入剖析 LM136-5.0QML 与 LM136A-5.0QML:高精度 5.0V 参考二极管的理想之选

    深入剖析 LM136-5.0QML 与 LM136A-5.0QML:高精度 5.0V 参考二极管的理想之选 在电子工程师的日常设计中,高精度、稳定的电压参考源是许多电路不可或缺的关键组件。今天,我们
    的头像 发表于 02-06 11:00 398次阅读

    高速精密运算放大器LM118QML:特性、应用与设计要点

    高速精密运算放大器LM118QML:特性、应用与设计要点 在电子工程师的日常设计工作中,运算放大器是不可或缺的基础元件。而对于那些对带宽和转换速率有较高要求的应用场景,选择一款合适的高速运算放大器
    的头像 发表于 02-06 09:55 509次阅读

    深入解析LM747QML双运算放大器:特性、参数与应用考量

    深入解析LM747QML双运算放大器:特性、参数与应用考量 在电子工程师的日常设计工作中,运算放大器是极为常见且关键的元件。今天,我们就来深入探讨德州仪器(TI)的LM747QML双运算放大器,详细
    的头像 发表于 02-06 09:55 278次阅读

    LM111QML电压比较器:特性、应用与设计要点解析

    、应用场景以及在设计过程中需要注意的要点。 文件下载: lm111qml.pdf 一、LM111QML的特性亮点 1. 低输入电流 LM111QML的输入电流极低,在整个温度范围内最大
    的头像 发表于 02-06 09:30 426次阅读

    深入解析LM2941QML与LM2941QML - SP:1A低压差可调稳压器的卓越之选

    深入解析LM2941QML与LM2941QML - SP:1A低压差可调稳压器的卓越之选 在电子工程师的日常设计工作中,稳压器是不可或缺的重要组件。今天,我们将深入探讨德州仪器(TI
    的头像 发表于 02-05 17:15 817次阅读

    LM2941QML与LM2941QML - SP:1A低压差可调稳压器详解

    LM2941QML与LM2941QML - SP:1A低压差可调稳压器详解 在电子设计领域,稳压器是不可或缺的组件,它能为电路提供稳定的电压,保证电子设备的正常运行。今天我们就来详细探讨德州仪器
    的头像 发表于 02-05 17:15 706次阅读

    探索LP2953QML与LP2953QML - SP:可调微功耗低压差稳压器的卓越之选

    探索LP2953QML与LP2953QML - SP:可调微功耗低压差稳压器的卓越之选 在电子设备的设计领域,电源管理始终是一个关键环节,稳压器的性能直接影响着整个系统的稳定性和效率。今天,我们就来
    的头像 发表于 02-05 16:25 446次阅读

    深入剖析LM6172QML:从特性到应用的全面解读

    深入剖析LM6172QML:从特性到应用的全面解读 在电子工程师的日常工作中,选择合适的放大器是设计成功的关键之一。今天,我们要深入了解一款高性能的放大器——LM6172QML,探讨它的特性、应用以
    的头像 发表于 02-05 16:20 388次阅读

    解析LM2940QML与LM2940QML - SP:1A低压差稳压器的卓越之选

    解析LM2940QML与LM2940QML - SP:1A低压差稳压器的卓越之选 在电子设备的设计中,电源管理是至关重要的一环。稳压器作为电源管理的核心组件,其性能直接影响着整个系统的稳定性和可靠性
    的头像 发表于 02-05 14:10 420次阅读

    深入剖析LM2940QML与LM2940QML - SP 1A低压差稳压器

    深入剖析LM2940QML与LM2940QML - SP 1A低压差稳压器 在电子设计领域,稳压器是保障电路稳定运行的关键元件。今天,我们就来详细探讨德州仪器(TI)的LM2940QML
    的头像 发表于 02-05 13:50 457次阅读

    ‌LM136A-2.5QML/LM136A-2.5QML-SP 技术文档摘要

    LM136A-2.5QML集成电路是一款精密的2.5V并联稳压二极管。该单片IC基准电压源作为低温度系数的2.5V齐纳管工作,动态阻抗为0.2Ω。LM136A-2.5QML 上的第三个端子可以轻松
    的头像 发表于 08-15 09:55 1158次阅读
    ‌LM136A-2.5<b class='flag-5'>QML</b>/LM136A-2.5<b class='flag-5'>QML</b>-SP 技术文档摘要

    ‌LM4050QML精密微功耗并联电压基准芯片技术文档总结

    LM4050QML精密基准电压源采用10引脚陶瓷CLGA封装。 该LM4050QML的设计消除了对外部稳定电容器的需求,同时确保 具有容性负载的稳定性,从而使LM4050QML易于
    的头像 发表于 08-13 09:36 1106次阅读
    ‌LM4050<b class='flag-5'>QML</b>精密微功耗并联电压基准芯片技术文档总结

    凡亿Allegro Skill工艺辅助之导出公制的坐标

    一般设计人员在pcb设计时使用英制单位,而在pcb设计完成后,我们需要导出坐标文件用于贴片厂进行贴片;有的板厂要求导出的坐标文件为公制单位,切换单位会比较麻烦且容易产生DRC错误或者误差,因此,Fanyskill脚步提供一键输出
    的头像 发表于 07-24 16:24 3673次阅读
    凡亿Allegro Skill工艺辅助之<b class='flag-5'>导出</b>公制的坐标