qml 学习要点记录(2)
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)相关推荐
- SAP Commerce开发时的Spring学习要点记录
Spring framework BeanPostProcessor BeanFactoryPostProcessor AutowiredAnnotationBeanPostProcessor Bea ...
- 信息系统项目管理师学习要点
信息系统项目管理师学习要点 信息化从小到大分为以下5个层次: 产品信息化.企业信息化.产业信息化.国民经济信息化.社会生活信息化 国家信息化体系包括6要素: 1.信息技术应用 2.信息资源 3.信息网 ...
- MySQL学习要点(10/10)
MySQL学习要点(10/10) 第九节.流程控制 0) CASE WHEN概述 ● 简单 CASE 函数 ● CASE 搜索函数 1) CASE结构作为表达式 2) CASE结构作为独立的语句 3) ...
- Java、大数据开发学习要点(持续更新中...)
Java.大数据开发学习要点 这里有作者本人学习Java.大数据开发时的详细知识记录,随时根据学习状态更新. 以下是关于
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- 成为Java高手的25个学习要点
成为Java高手的25个学习要点 想要精通Java,成为Java高手,需要不断的学习和积累.本文给出了Java学习过程中需要注意的25个学习目标,希望可以给您带来帮助. AD: 2013大数据全球技术 ...
- RIP 注意事项、学习要点及其总结
RIP 注意事项.学习要点及其总结 转载于:https://blog.51cto.com/danet/364685
- Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
网友分享,拿来共享一下 这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序. 新说明一下我的开发环境: 操作系统:在windows下使用wub ...
- python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码),矩阵,样本,模型,类别,真实 深度学习自学记录(3)--两种多分类混淆矩阵的Python实现(含代码) 深度学习自学记录(3) ...
最新文章
- unity工程包怎么上传git_如何将Git用于Unity3D源代码管理?
- 集成极光推送遇到的问题
- VTK:Qt之RenderWindowUISingleInheritance
- 多媒体技术创新开启“科技+文化”新“视”界
- vb6.0服务器组件安装失败,win10安装vb6.0总是失败怎么办?win10 vb6.0安装不了的解决办法...
- ddt python_python-ddt实践
- tshark 解析pcap中带TLS协议的数据包
- Angular 7和 .NET Core 2.2——全球天气(第2部分)
- 0c-36-自动释放池应用场景
- JavaSwing+SQL Server实现网上购物系统
- NLTK-006:分类文本(性别鉴定)
- 上涨趋势回踩均线选股器
- 【从零开始的SDN学习之路】之闲话Neutron与SDN的联系
- 过去66年的66项最佳发明(1994~2019)
- IPV6 邻居发现协议(NDP)
- 可视化Docker管理工具-DockerUI
- # Java 并发编程的艺术(二)
- 成人想补充蛋白质,光吃鸡蛋就够了?鸡蛋和蛋白粉哪个好一点?
- 蒲公英企服平台对话奈学教育CEO孙玄——旨在让每一个人都有逆袭的机会。
- 旅游平台分账模式是什么样的?