Qt Quick中的信号与槽

在QML中,在QtQuick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt中的信号与槽的内容。1.链接QML类型的已知信号QML中已有类型定义的信号分为两类:一类

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容。

1. 链接QML类型的已知信号

  QML中已有类型定义的信号分为两类:一类由用户输入产生,如按键,鼠标,触摸屏,传感器等;另一类是由对象状态或属性变化产生的。

(1)信号处理器

  信号处理器等价于Qt中的槽,一般是on<Signal>这种形式,比如onClicked:{}

  信号处理器放在拥有信号的元素内部,当元素信号发射时处理器被调用,还有一种情况,要处理的信号不是当前元素发出来的,而是其他类型(对象),比如处理按键的Keys,这就是附加信号处理器。

(2)附加信号处理器

  在QML语言的语法中,有一个附加属性和附加信号处理器的概念,这是附加到一个对象上的额外的属性,从本质上讲,这些属性是由附加类型来实现和提供的,他们可能被附加到另一种类型的对象上,附加属性与普通属性的区别在于,对象的普通属性所有对象本身或基类提供的。

Item
{
    width:100;
    height:100;
    
    focus:true;
    keys.ebable:true;
    keys.onReturnPressed:{}
}

  附加信号处理器,要遵循<AttachingType>.on<Signal>语法。

  信号处理器与附加信号处理器有一个共性:响应新高的代码都放在元素的内部,通过ECMAScript代码块就地实现,而其实呢,Qt Quick中还有另外一种方式来处理信号和槽,那就是专业的Connections

(3)Connections

  一个Connections对象创建一个到QML信号的连接。

  前面的两种方式都是用on<Signal>这种就地代码块的方式,而在有些情况下,这样的处理并不方便,比如:

  (1)你需要将多个对象链接到同一个QML信号上

  (2)你需要在发出信号的作用域之外来建立链接

  (3)发射信号的对象没有在QML中定义(可能通过C++导出的)

  遇到上面的情况,我们可以使用Connections

Connections
{
    target:area;
    on<Signal>:function or code block;
}

2. 定义自己的信号

  当自定义类型不可避免,当你需要通知别的对象你的状态发生了变化,此时最好的方法就是使用自定义信号。

  自定义信号语法:

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

  siganl denfineSignal(color clr) 

Component
{
    id:colorComponent;
    Rectangle    
    {
        id:colorPicker;
        width:100;
        height:100;
        signal colorPicked(color clr);
        MouseArea
        {
            anchors.fill:parent;
    
            onPressed:colorPicker.colorPicked(colorPicker.color)
        }
    }
}

Connections
{
    target:colorComponent;
    onColorPicked:{}
}

3. 信号与槽的链接

  其实在QML中还有一种更一般的方法,QObject:connect,这一下就让我们想起了Qt C++中使用的信号和槽。

Rectangle
{
    id:relay;
    signal message(string msg);
    
    Component.onCompleted:
    {
        relay.message.connet(defineFun);
    }
    
    function defineFun(msg)
    {
        console.log("Message is:" + msg);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120077.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月29日 下午2:00
下一篇 2021年12月29日 下午2:00


相关推荐

  • Java葵花宝典(一)

    Java葵花宝典(一)1.面向对象和面向过程的区别面向过程:是以事件为中心,按照我们编写的代码,根据完成步骤的过程来执行的优点:面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要考量的因素的时候,比如单片机开发,嵌入式开发,Linux一般采用面向过程开发缺点:没有面向对象易维护、易复用、易扩展面向对象:将事物高度抽象化,我们把要完成的功能高度抽象成一个个对象,调用对象的方法或者属性来完成所需功能优点:易维护、易复用、易扩展。因为面向对象有封装、继承、多态的特性,所以可以设计

    2022年7月8日
    40
  • 测试18

    测试18文章目录系统测试概述功能测试性能测试负载测试压力测试性能测试、压力测试、负载测试的关系兼容性测试安全测试健壮性测试配置测试可用性测试文档测试系统测试概述系统测试的定义将已

    2022年7月4日
    31
  • 51单片机控制步进电机-电路连接[通俗易懂]

    51单片机控制步进电机-电路连接[通俗易懂]51单片机控制步进电机-电路连接概要:本案例讲解的内容是51单片机控制步进电机硬件连接部分。后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容硬件清单:1、51单片机控制板一个2、二相四线步进电机一个3、稳压电源一个4、TB6600步进电机驱动器一个整体连接图:原理图:功能部分说明:1、51单片机:①输出脉冲到TB6600驱动器PUL端口,从而控制步进电机转动②控制TB6600驱动器ENA端口,从而控制步进电机使能③控制TB6600驱动器DIR端口,从而控制步进电机

    2022年5月31日
    37
  • Claude Code完整安装部署指南:支持Windows/Linux/macOS三平台详细教程

    Claude Code完整安装部署指南:支持Windows/Linux/macOS三平台详细教程

    2026年3月16日
    2
  • Vim搜索关键字[通俗易懂]

    Vim搜索关键字[通俗易懂]有以下两种方法Method1:/content默认从上往下查找只读模式下输入/content后回车按n向下查找按N向上查找Method2:?content默认从下往上查找只读模式下输入?content后回车按n向上查找按N向下查找实例/content用Vim打开文件后,直接输入/关键字并回车,定位到第一个关键字,之后通过n向下查找,通过N向上查找?

    2026年2月25日
    2
  • Pandas笔记_python总结笔记

    Pandas笔记_python总结笔记创建数据随机数据创建一个Series,pandas可以生成一个默认的索引s=pd.Series([1,3,5,np.nan,6,8])通过numpy创建DataFrame,包含一个日期索引,以及标记的列dates=pd.date_range(‘20170101’,periods=6)df=pd.DataFrame(np.random.randn(6,…

    2022年8月26日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号