Qt.binding()的作用,动态创建新的绑定,就是向Qt.binding()传递一个函数来返回需要的结果。

import QtQuick 2.0

Item {
    width: 600
    height: 600
    Rectangle{
        width: 10;height: width * 2
        color: "red";anchors.centerIn: parent;focus: true
        Keys.onSpacePressed:
            /*使用Qt.binding()来绑定height和width的关系,
            * 这样只要width变化,就是触发height变化
            */
            height = Qt.binding(function(){return width*3})

        MouseArea{
            anchors.fill: parent
            onClicked: parent.width += 10
        }
    }
}

在属性绑定中可以使用this,在其他情况下this的值都是未定义的。

connect()函数在什么时候使用?

一般的,发射信号的QML对象类型会提供一个默认的信号处理器。但是,有时需要从一个对象发射一个信号来触发另一个对象中定义的函数,这时就需要使用connect()函数。

关键属性信号处理器Component.onCompleted:每一个QML对象都包含一个附加的Component属性,它可以引用对象被实例化的组件。每一个Component都会发射一个onCompleted信号,其对应的onCompleted()处理器会在QML环境完全建立以后执行。在onCompleted()中的脚本代码就可以实现在启动时运行,一些初始化的操作都可以放在这里进行。

一个QML文档包含两部分:import导入语句和一个单一的根对象声明构成的对象树。需要强调的时,一个QML文档只能包含一个根对象声明,不允许出现两个平行的根对象。比如下面的代码肯定是错误的:

import QtQuick 2.0

Item {
    width: 600
    height: 600
}

Rectangle{
    function startupFunction(){
        //...startup code
    }

    Component.onCompleted:
        startupFunction();
}
QML文件名必须以大写字母开头,如:Abc.qml

.qml文件中的根对象定义了可用于该QML类型的一些特性。所有属于该根对象的属性,信号和方法,无论是自定义声明,还是来自QML类型,都可以在外部进行访问,并且可以被该类型的对象进行读取和修改。例如,在SquareButton.qml中的Rectangle使用如下代码进行定义:

//SquareButton.qml
import QtQuick 2.0
Rectangle{
    id: root
    property bool pressed: mouseArea.pressed
    signal buttonClicked(real xPox, real yPos)

    function randomizeColor(){
        root.color =
                Qt.rgba(Math.random(), Math.random(), Math.random(), 1)
    }

    width: 100;height: 100
    color: "red"
    MouseArea{
        id:mouseArea
        anchors.fill: parent
        onClicked:
            root.buttonClicked(mouse.x, mouse.y)
    }
}
所有的SquareButton对象都可以使用这里定义的pressed属性、buttonClicked信号和randomizeColor()方法。例如:

//application.qml
import QtQuick 2.0
SquareButton{
    id:squareButton
    onButtonClicked:{
        console.log("Clicked", xPos, yPos)
    }
}
需要注意的时,在SquareButton.qml中定义的任何一个id值都不能在SquareButton对象中进行访问。因为id值只能在组件作用域进行访问。另外,SquareButton对象也无法通过mouseArea来引用MouseArea子对象。如果想使用MouseArea等子对象中的内容,需要像这里定义pressed属性一样,将子对象中的属性定义到根对象中。如果这里定义的SquareButton对象的id值不是squareButton,而是root,它也不会与SquareButton.qml中定义的根对象的id值发生冲突,因为它们定义在不同的作用域。

Component组件定义只包含一个唯一的根对象,并且不能在根对象之外定义任何数据,只能使用id进行引用。Component首字母要大写哦C,写成componet可就是另外的意思了。

import QtQuick 2.2
Item {
    width:100;height: 100
    Component{
        id:redSquare
        Rectangle{
            color: "red"
            width: 10
            height: 10
        }
    }

    Loader{sourceComponent: redSquare}
    Loader{sourceComponent: redSquare;x:20}
}

qml 学习要点记录(2)相关推荐

  1. SAP Commerce开发时的Spring学习要点记录

    Spring framework BeanPostProcessor BeanFactoryPostProcessor AutowiredAnnotationBeanPostProcessor Bea ...

  2. 信息系统项目管理师学习要点

    信息系统项目管理师学习要点 信息化从小到大分为以下5个层次: 产品信息化.企业信息化.产业信息化.国民经济信息化.社会生活信息化 国家信息化体系包括6要素: 1.信息技术应用 2.信息资源 3.信息网 ...

  3. MySQL学习要点(10/10)

    MySQL学习要点(10/10) 第九节.流程控制 0) CASE WHEN概述 ● 简单 CASE 函数 ● CASE 搜索函数 1) CASE结构作为表达式 2) CASE结构作为独立的语句 3) ...

  4. Java、大数据开发学习要点(持续更新中...)

    Java.大数据开发学习要点 这里有作者本人学习Java.大数据开发时的详细知识记录,随时根据学习状态更新. 以下是关于

  5. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  6. 成为Java高手的25个学习要点

    成为Java高手的25个学习要点 想要精通Java,成为Java高手,需要不断的学习和积累.本文给出了Java学习过程中需要注意的25个学习目标,希望可以给您带来帮助. AD: 2013大数据全球技术 ...

  7. RIP 注意事项、学习要点及其总结

    RIP 注意事项.学习要点及其总结 转载于:https://blog.51cto.com/danet/364685

  8. Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序

    网友分享,拿来共享一下 这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序. 新说明一下我的开发环境: 操作系统:在windows下使用wub ...

  9. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...

    深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...

最新文章

  1. unity工程包怎么上传git_如何将Git用于Unity3D源代码管理?
  2. 集成极光推送遇到的问题
  3. VTK:Qt之RenderWindowUISingleInheritance
  4. 多媒体技术创新开启“科技+文化”新“视”界
  5. vb6.0服务器组件安装失败,win10安装vb6.0总是失败怎么办?win10 vb6.0安装不了的解决办法...
  6. ddt python_python-ddt实践
  7. tshark 解析pcap中带TLS协议的数据包
  8. Angular 7和 .NET Core 2.2——全球天气(第2部分)
  9. 0c-36-自动释放池应用场景
  10. JavaSwing+SQL Server实现网上购物系统
  11. NLTK-006:分类文本(性别鉴定)
  12. 上涨趋势回踩均线选股器
  13. 【从零开始的SDN学习之路】之闲话Neutron与SDN的联系
  14. 过去66年的66项最佳发明(1994~2019)
  15. IPV6 邻居发现协议(NDP)
  16. 可视化Docker管理工具-DockerUI
  17. # Java 并发编程的艺术(二)
  18. 成人想补充蛋白质,光吃鸡蛋就够了?鸡蛋和蛋白粉哪个好一点?
  19. 蒲公英企服平台对话奈学教育CEO孙玄——旨在让每一个人都有逆袭的机会。
  20. 旅游平台分账模式是什么样的?

热门文章

  1. 网页添加Live2D看板娘简易教程
  2. 树、二叉树、AVL树,B树基础学习
  3. ArduPilot Copter Release Notes 中文翻译
  4. 程序员七夕情人节表白代码
  5. 发布变更又快又稳?腾讯运维工程师经验首发
  6. 开发编程-创意个人简历
  7. hadoop MapReduce案例运营商关于用户基站停留数据统计
  8. 【Gurobi】| Gurobi中非线性约束的对偶值的获取:QCP、QCQP、SOCP
  9. 华北电力大学微型计算机,华北电力大学2017年计算机等级考试报名时间
  10. 第一篇Markdown博客---数据中心光互连