美文网首页
22--Qt定义自己的信号

22--Qt定义自己的信号

作者: lvyweb | 来源:发表于2019-06-04 15:10 被阅读0次

标签(空格分隔): Qt


自定义信号与使用
如果你自己定义新的QML类型,可以使用signal关键字给你的类型添加信号。其语法如下:

signal <name> [(<type><parameter name>[,...])]
这是你的类型通告自己状态的最好方式,符合Qt的风格。
信号其实是个方法(函数),所以,它的发射实际上是通过调用以信号名为名的方法达成的。举个实际的例子:我们在界面上放一个字符串,两个代表颜色的小方块,点小方块,字符串的颜色就变成小方块的颜色。代码如下:

import QtQuick 2.0

Rectangle {
    width: 320;
    height: 240;
    color: "#C0C0C0";

    Text {
        id:coloredText;
        anchors.horizontalCenter: parent.horizontalCenter;
        anchors.top:parent.top;
        anchors.topMargin: 4;
        text:"Hello World !";
        font.pixelSize: 32;
    }
   Component {
       id: colorComponent;
       Rectangle {
           id: colorPicker;
           width: 50;
           height: 30;
           signal colorPicked(color clr);
           MouseArea {
               anchors.fill: parent;
               onPressed: colorPicker.colorPicked(colorPicker.color);
           }
       }
   }
   Loader {
       id: redLoader;
       anchors.left: parent.left;
       anchors.leftMargin: 4;
       anchors.bottom: parent.bottom;
       anchors.bottomMargin: 4;
       sourceComponent: colorComponent;
       onLoaded: {
           item.color ="red";
       }
   }
   Loader {
       id: blueLoader;
       anchors.left: redLoader.right;
       anchors.leftMargin: 4;
       anchors.bottom: parent.bottom;
       anchors.bottomMargin: 4;
       sourceComponent: colorComponent;
       onLoaded: {
           item.color ="blue";
       }
   }
  Connections {
      target: redLoader.item;
      onColorPicked:{
          coloredText.color = clr;
      }
  }
  Connections {
      target: blueLoader.item;
      onColorPicked :{
          coloredText.color = clr;
      }
  }

}

首先定义了一个Text对象,id为coloredText,后面会根据这个id来改变它的颜色。
然后,定义了一个组件,组件内有一个Rectangle对象,这里是我们定义信号的地方。我们设置了Rectangle的尺寸,然后定义了信号colorPicked,语句如下
signal colorPicked(color clr);
为了触发信号,给Rectangle引入了MouseArea。MouseArea是专门处理鼠标操作的Item,这里我们先知道它有一个pressed信号就行了。我们给这个信号指定信号处理器onPressed,在信号处理器中我们调用我们刚定义的信号:colorPicker.colorPicked(colorPicker.color);信号的触发就是一个函数的调用。
组件是可以重复利用的,一个组件可以在单独的QML文件中定义,也可以嵌入到其他QML文档中来定义以方便简单组件的使用。这里是在主QML文档内嵌入组件的定义,定义好了组件,就可以使用Loader来加载组件了。(Loader与component对应)

Loader是专门用来动态创建组件的,它可以从QML文件中创建组件,也可以指定sourceComponent来创建,这里是组件嵌入在主QML文件中定义的,所以使用了sourceComponent方式。我们给每个Loader一个id,以便后面连接时使用。还使用anchors为Loader布局,最后,在Loader的onLoader信号处理器内给Rectangle对象配置颜色。

创建完Loader,就是建立连接了。这里使用Connections 来建立信号的连接,target指向刚才说的Loader对象的 item属性,item属性实际上指向Loader创建的对象。在Connections对象中,通过onColorPicked信号处理器响应用户点击操作。

具体效果


变色.gif

相关文章

  • 22--Qt定义自己的信号

    标签(空格分隔): Qt 自定义信号与使用如果你自己定义新的QML类型,可以使用signal关键字给你的类型添加信...

  • Qt5 - 3. 自定义信号&槽

    信号&槽是 Qt 的核心特性之一,Qt 允许我们自定义信号&槽,因此我们可以在 Qt 程序中定义我们自己的信号&槽...

  • Nginx常规小脚本

    nginx日志清理 清理日志 USR1是用户自定义信号。可以理解为:进程自己定义接到这个信号该做什么 nginx ...

  • RACSubject和RACReplaySubject使用

    RACSubject:信号提供者,自己可以充当信号,又能发送信号。使用场景:通常用来代替代理,有了它,就不必要定义...

  • RACSubject

    RACSubject信号提供者,自己可以充当信号,又能发送信号。 使用场景:通常用来代替代理,有了它,就不必要定义...

  • 信号完整性知识点3 - 信号的本质

    SI PI/SI,power/signal integrity,信号完整性,用于描述信号的质量。 高速信号的定义,...

  • 第一章信号与系统

    信号的分类 1.确定信号与随机信号 确定信号:信号可以用一个确定的时间函数表示随机信号:不满足确定信号定义的信号 ...

  • [iOS][OC] 一步一步实现响应式(附demo)

    demo GitHub-XSignal 信号 信号是数据的源头,宽泛地说信号也是信号产生、订阅的抽象汇总。定义一个...

  • Django 框架之 Django信号

    知识点 概念 如何监听信号 Django内置信号 自定义信号 使用Django内置信号 概念 Django 提供一...

  • 常用的信号带宽定义

    零点到零点带宽(null-to-null bandwidth) 通信教材中最常见的带宽定义例如:白噪声的双边谱带宽...

网友评论

      本文标题:22--Qt定义自己的信号

      本文链接:https://www.haomeiwen.com/subject/rbalxctx.html