QT信号和槽机制

    信号和槽机制是QT的核心机制,是一种高级接口,应用于对象之间的通信,是QT区别于其他工具包的重要地方。信号和槽是QT自定义的一种通信机制,独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(meta object compiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。

     当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有当所有的槽返回以后发射函数(emit)才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个的执行,但是他们执行的顺序将会是随机的,不能人为指定。

      信号在头文件中用signals关键字声明,可以携带参数。

      槽是普通的成员函数,可以被正常调用,其特殊性是可以和信号关联。槽可以有参数,但不能是缺省值。槽有public,protected,private三种权限。

      信号和槽关联有以下几种模式:

           一个信号和一个槽关联;

           一个信号和多个槽关联;

           多个信号和一个槽关联;

      一个信号可以和另外一个信号关联。

      QT信号和槽机制的优点是:

        类型安全的。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数与接受该信号的槽的参数类型和参数个数相同;不过,一个槽的参数个数可以少于信号的参数个数,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。

         松散耦合的.QT信号和槽机制减弱了QT对象的耦合度。

       一个类要想支持信号和槽,必须从QObject或其子类继承。注意,Qt信号和槽机制不支持对模板的使用。

       信号和槽机制增强了对象间通信的灵活性,然而这也损失了一些性能。与回调函数相比较,信号和槽机制有些慢。通常,通过传递一个信号来调用槽函数将会比直接调用非虚函数慢10倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值