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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JMeter实战(二) 运行原理

    JMeter实战(二) 运行原理

    2020年11月20日
  • Laravel 5.6 安装 guzzlehttp

    Laravel 5.6 安装 guzzlehttp

    2021年10月24日
  • 海思hi3518ev300说明书_海思3516dv300方案开发

    海思hi3518ev300说明书_海思3516dv300方案开发1.硬件内置AudioCodec/外置FM1288,hi3516dv300为内置audiocodec,硬件上外接FM1288,通过MIC单端/差分输入音频.2.重要概念2.1.I2S相关概念(1)LRCLK(帧时钟,也称为WS) 当LRCLK为低电平时表示左声道,高电平时表示右声道, LRCLK的频率=采样频率(2)SCLK(串行时钟),也叫BCLK(位时钟);方波形式存在 对应数字音频的每一位数据,SCLK都有一个脉冲. SCLK的频率=2*采样频率*采样位数

  • Android物联网应用程序开发(智慧城市)—— 摄像头监控界面开发「建议收藏」

    Android物联网应用程序开发(智慧城市)—— 摄像头监控界面开发「建议收藏」效果:布局代码:<?xmlversion=”1.0″encoding=”utf-8″?><RelativeLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:app=”http://schemas.android.com/apk/res-auto”xmlns:tools=”http://schemas.android.com/tools”android

  • vim 注释快捷键_vim编辑器快捷键

    vim 注释快捷键_vim编辑器快捷键我是个vim新手,非常喜欢这个工具,因为纯手工操作吧。可是有些快捷键还是不知道,写Python的时候经常要调试,会批量注释掉一些代码,vim不像pycharm那样Ctrl+/就可以了,反注释还是Ctrl+/。不过vim在这方面显得更强大更灵活点。有两种方法可以实现:第一种方法批量插入字符快捷键:Ctrl+v进入VISUALBLOCK(可视块)模式,按j(向下选取列)或者k

  • Android应用开发揭秘

    Android应用开发揭秘《Android应用开发揭秘》                                              ///////http://www.iteye.com/wiki/hzbook/2249-Android  书名:Android应用开发揭秘作者:杨丰盛出版社:机械工业出版社ISBN:9787111291954出版日期:2010年3月(1版2次)…

发表回复

您的电子邮箱地址不会被公开。

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