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

    文章

    127

    浏览量

    12336

原文标题:qml属性导出

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

收藏 人收藏

    评论

    相关推荐

    SOLIDWORKS高级BOM及属性批量导入工具

    SOLIDWORKS BOM插件-SolidKits.BOMs工具可以准确、规范、便捷的一键完成各种结构BOM导出,汇总BOM生成,批量导入属性,自动建立结构,实现规范化管理,并自定义打包操作,还可根据企业需求定制模板.BOM工具试用/报价/购买,欢迎点击咨询Solidk
    的头像 发表于 12-02 16:11 152次阅读

    DAC7744用作TMS320F2812的DAC时是否需要将2812输出的高电平转化为5v的高电平

    请问DAC7744用作TMS320F2812的DAC时是否需要将2812输出的高电平转化为5v的高电平?谢谢!
    发表于 11-15 06:57

    需要将多路单端音频信号经TPA3130放大至输出,会有杂音怎么处理

    大家好,我现在需要将多路单端音频信号经TPA3130放大至输出。 现在前级用运放NE5532叠加几路音频信号,运放输出再接入TPA3130. 这样接的话,会有杂音。不使用运放直接将几路音频信号串接电阻并在一起输入TPA3130,杂音还会小点。 这样的问题怎么处理? 是
    发表于 10-21 06:00

    怎样将keil中的程序导出

    1. 准备工作 在开始导出程序之前,需要确保已经完成了以下准备工作: 安装Keil MDK-ARM软件。 创建一个新的项目,并添加所需的源文件和库文件。 配置项目设置,包括芯片型号、编译器选项、链接
    的头像 发表于 09-02 10:23 1566次阅读

    LM555QML定时器数据表

    电子发烧友网站提供《LM555QML定时器数据表.pdf》资料免费下载
    发表于 08-20 09:29 0次下载
    LM555<b class='flag-5'>QML</b>定时器数据表

    AD7124的程序如何将它导出成hex格式

    ,那么如何将它导出成hex格式?我翻遍了其中的资料还是没有找到办法。因为只有把这个hex文件烧写到黑色的评估板里,才能测试AD7124
    发表于 07-23 08:13

    LM7171QML,LM7171QML-SP高速电压反馈放大器数据表

    电子发烧友网站提供《LM7171QML,LM7171QML-SP高速电压反馈放大器数据表.pdf》资料免费下载
    发表于 06-15 10:17 0次下载
    LM7171<b class='flag-5'>QML</b>,LM7171<b class='flag-5'>QML</b>-SP高速电压反馈放大器数据表

    5.0V参考二极管LM136A-5.0QML LM136-5.0QML数据表

    电子发烧友网站提供《5.0V参考二极管LM136A-5.0QML LM136-5.0QML数据表.pdf》资料免费下载
    发表于 04-08 09:27 0次下载
    5.0V参考二极管LM136A-5.0<b class='flag-5'>QML</b> LM136-5.0<b class='flag-5'>QML</b>数据表

    LabVIEW模板匹配位置信息导出

    大家好,我在利用ni vision assistant生成的模板匹配界面时,想要将每一个匹配物体的位置信息导出到word或者Excel,但是他这个匹配个数不确定,怎么样把匹配到的所有物体信息导出呀?利用哪些编程?谢谢大家了
    发表于 03-11 20:22

    arcmap怎么导出矢量数据

    软件。你可以在计算机上的“开始”菜单中搜索并打开该软件。 第二步:加载矢量数据 在 ArcMap 中导出矢量数据之前,你需要加载你要导出的矢量数据。这可以通过以下方式实现: 点击“文件”菜单,选择“添加数据”; 浏览到你的矢量
    的头像 发表于 02-25 15:13 3372次阅读

    arcgis图层字段怎么批量输入属性

    对于ArcGIS图层字段的批量输入属性,可以通过以下步骤完成: 打开ArcMap软件,并加载需要编辑属性的图层。 在ArcMap的主菜单中,选择“编辑(Edit)”选项,然后选择“开始编辑
    的头像 发表于 02-25 14:15 4919次阅读

    arcgis中如何在属性表中选择多个属性

    在ArcGIS中,你可以通过多种方式来选择属性表中的多个属性。下面是一些常用的方法: 方法一:使用Select by Attributes工具 在ArcGIS的属性表中,选择“Selection
    的头像 发表于 02-25 11:10 1.4w次阅读

    gis按属性选择怎么选择两个

    属性选择的步骤和方法。 打开GIS软件:首先,需要打开安装在电脑上的GIS软件,例如ArcGIS、QGIS等。安装完成后,启动软件并创建新项目或打开已有项目。 导入地理数据:选择"导入"或"添加"功能,将需要进行
    的头像 发表于 02-25 11:04 3119次阅读

    mapgis如何给区属性赋值

    地进行数据分析和可视化。 在MapGIS中给区属性赋值有多种方法,下面将详细介绍其中的几种常用方法。 1.手动赋值 手动赋值是最直接和简单的方法。首先,在MapGIS中打开需要进行属性赋值的地图,选择相应的图层。然后,通过选择合
    的头像 发表于 02-23 17:49 2255次阅读

    如何快速为DB块变量添加属性

    有些情况需要为PLC DB块变量添加一些属性,常规的做法是在DB块中选中这个变量,然后打开变量属性输入属性名称和属性值。
    的头像 发表于 01-02 14:18 2188次阅读
    如何快速为DB块变量添加<b class='flag-5'>属性</b>