QML 信号与信号响应方法的总结

作者 : 开心源码 本文共1530个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共213人阅读

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

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);    }}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » QML 信号与信号响应方法的总结

发表回复