推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

QML 信号与响应方法的总结

   2023-07-22 网络整理佚名1470
核心提示:来做扩展,包括添加自定义信号以及其它必要的功能等,其实这个过程也相当于对原有的类型做了派生(参考C++的习惯)。自定义信号的处理形式和预定义信号一致,参考上面预定义信号的响应方法。通过信号的方法指定响应,简单的说,就是用于针对具体信号指定响应的方法或者触发的下一个信号。对象的信号必须通过对象来引用。框架提供了一个超级好用的类型:,它可以用于响应任意对象的信号(官方说法是)。

signal [([ [, ...]])]

一般来说,可视化自定义QML对象会基于Item进行扩展,包括添加自定义信号和其他必要的功能。 其实这个过程就相当于推导原始类型(参考C++的习惯)。

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

在上面的代码中,对象定义了信号,带有整数参数 x 和 y。 然后添加一个为鼠标区域定义的组件,其中通过信号槽触发父对象的自定义信号。

信号属于预定义类型,有自己的参数mouse。 更多信息可以参考以下链接:

#-

自定义信号的处理形式与预定义信号的处理形式相同,参见上面预定义信号的响应方法。

5. 通过信号的方法指定响应

about,简单地说,就是用来指定对特定信号或下一个触发的信号的响应的方法。 更详细地说,如果触发了一个信号,它可以指定响应的方式,或者指定触发下一个信号形成信号的连锁反应。 这个过程是通过pass指定的。

如果你熟悉Qt,你应该熟悉C++的::方法。 与C++部分类似,QML中也有方法,可以连接任意(包括多个)信号和方法,但QML更加灵活,调用方式也不同。 不同之处在于,在 C++ 中 :: 是静态方法,而在 QML 中它由信号提供。 参考以下表格:

signal.connect(signal / function_name)

请注意,QML 对象的信号必须通过对象引用。

看一个例子:

【获取QT开发教程学习资料,点击下方链接领取费用↓↓,首码直播不迷路~】

点击→接收“链接”

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

从上面的代码可以看出,在响应被引用组件的信号时,通过另一个组件的()来调用连接到父组件的函数和信号。

如果信号有参数,那么连接的方法 ( ) 和信号 ( ) 也应该有相同数量的参数。

当组件的信号被触发时,您可以看到以下输出:

clicked connect slt_clicked
clicked connect mySignal

当然,如果不再需要连接,也是必不可少的。 该函数则相反,它专门用于解除现有连接的绑定,并且它也是由信号调用的。

Rectangle {
    id: relay
    // ... 省略
    function removeSignal() {
        mousearea.clicked.disconnect(slt_clicked);
        mousearea.clicked.disconnect(mySignal);
    }
}

6.处理任意对象的信号:

该框架提供了一个超级方便的类型: ,它可以用来响应来自任意对象的信号(官方)。

大多数情况下,用于连接到其他 QML 文件中定义的对象的信号需要指定信号所属对象的 id。 参考以下表格:

import QtQml
Connections {
    target: object_id
    onSignal: {
        // do something ....
    }
}

该属性用于指定响应信号所属对象的id。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON