QML 信号与信号响应方法的总结
来源:englyf     阅读:792
云上智慧
发布于 2019-01-09 18:56
查看主页

以下内容为本人的学习笔记的一部分

QML 中信号的定义分为 QtQuick 框架提供和自己设置两种。
下面就详情一下信号的定义和响应方式。

  1. QtQuick 提供的信号:

这些信号都是已经预约义好了,我们需要的是公告响应(方法)就可。比方 MouseArea 的 clicked 信号,要响应它,仅需要在 QML 文件中增加以下形式的语句就可:

on<Signal>: {
?do something ....
}

这里注意一下,Signal 必需首字母大写。冒号后边假如仅是单语句,可以不用大括号{}。

  1. 属性变化发射的信号:

假设公告了一属性 property,可增加以下形式语句响应属性的变化:

on<Property>Changed: {
?do something ....
}

这里注意一下,Property 必需首字母大写。语句的形式和上面相似。

  1. 附加类型对象的信号:

举个栗子,QML 引擎会自动附加 Component 对象到 QML 文件里公告对象中,当对象加载完成时,会触发 Component 对象的 completed 信号,为了响应此信号,那么增加以下形式语句:

Component.onCompleted: {
?do something ....
}

  1. 自己设置信号:

用以下形式公告自己设置的信号,

signal <name>[([<type> <parameter name>[, ...]])]

调用自己设置信号,比方:

Rectangle {    id: root    signal mysignal(int x, int y)    MouseArea {        anchors.fill: parent        onPressed: root.mysignal(mouse.x, mouse.y)    }}

上面的 mouse 来自于对象 MouseArea 的信号 pressed 定义公告。

自己设置信号的解决形式和其它的预约义信号一致。

  1. 解决任意对象的信号:

QtQuick 框架提供了一个类型:Connections 用于解决任意对象的信号。参考以下形式:

Connections {
?target: object_id
?onSignal: {
??do something ....
?}
}

以上用于响应 id 为 object_id 的对象发出的信号 signal。

  1. QML 中的 connect 方法

和 C ++ 部分相似,QML 中也有 connect 方法,但是 QML 的 connect 更灵活。QML 的 connect 由信号提供,可以连接任意的(包括多个)信号和方法。参考以下形式:

signal.connect(signal / function name)

Rectangle {    id: root    signal mySignal()    \\ 信号响应解决    onMySignal: console.log("clicked connect mySignal")    \\ 普通方法    function slt_clicked() {      console.log("Clicked");    }    Component.onCompleted: {        mousearea.clicked.connect(slt_clicked);        mousearea.clicked.connect(mySignal);    }    MouseArea {        id: mousearea        anchors.fill: parent    }}

注意一下,连接的信号 ( clicked ) 假如带有参数,那么被连接的方法 ( slt_clicked ) 也应该有同样数目的参数。

当然,假如连接不再需要,那么 disconnect 也是不能缺少的。

Rectangle {    id: relay    \\ ... 省略    function removeSignal() {        mousearea.clicked.disconnect(slt_clicked);        mousearea.clicked.disconnect(mySignal);    }}
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
高级工程师的进阶之路
Vue插件之vue-awesome-swiper
低代码开发不靠谱?看低代码开发在物联网APP开发中的应用
Node学习随笔—数据库(MongoDB,mongoose)
Apache Dubbo已不再局限于Java语言
首页
搜索
订单
购物车
我的