Qt信号和槽

        最近一直在做Qt程序的开发,一开始对于Qt的信号和槽机制理解不是很深刻,虽然可以实现功能,但是理解上还是没有深入。经过一段时间的项目实践,对于信号和槽的理解更加深入了一点,现在总结一下自己的学习心得体会,分享给需要的人。

一、写在前面

       无论我们看书,还是从网上找资料,肯定看到过这样的话:“信号和槽是Qt的灵魂”,“信号和槽是Qt的核心”等等,这样说并没有错,只是对于初学者而言,面对这样的话难免心生敬畏,会产生高大上、是不是很难等这样的感慨。殊不知,Qt的信号只需要一句定义一句发射信号就可以实现(无需定义),而槽只是一个函数。所以,初学者对于Qt的信号和槽千万不要想得太复杂,窃以为记住前述那句话就已足够。

二、信号和槽的分类

       对于信号和槽有这样那样的分类,对于程序设计者,尤其是刚接触Qt的小白来说,记住实现的方法或许更为有用。下面就从Qt的实现方法的不同将其分为三类。

      1、可以直接调用的信号和槽函数

      这类信号和槽函数是Qt中默认的属性、是默认的信号和槽,这类是Qt中某些界面的属性,可以直接调用。例如在Qt中一个控件显示,另外一个控件不显示,这里以按钮为例,可以用这种方式:

       QObject::connect(ui->pushButton1, SIGNAL(clicked()), ui->pushButton2, SLOT(setDisabled()));

上面的方式即可实现按钮1点击的时候,按钮2不能使能。

    2、可直接调用Qt中的信号,槽需要自定义

    这类信号是Qt中自带的一些属性,而槽函数需要自定义,自定义的槽中可以实现一类操作,达到想要的一些功能。这里还是以按钮为例,例如想通过点击按钮实现其他多个控件的操作,可以这样:

      QObject::connect(ui->pushButton1, SIGNAL(clicked(bool)),this , SLOT(slot_display(bool)));

这里的slot_display(bool state)是定义在头文件中的函数,在这里和pushputton1连起来,实现点击按钮1改变多个按钮属性的操作,同时可以在这里实现其他的点击pushButton的操作。

    3、槽函数和信号均需要自定义

      这类信号和槽函数均需要自己定义,这类信号的发射对象和实现槽函数的接收对象都不是具体的控件,而是某个类。举例来说,类send发射信号signal(),类received执行某种操作slot_continue(),可以将二者这样联系:

     QObject::connect(send, SIGNAL(signal()),received , SLOT(slot_continue()));

这里signal()信号可以定义在send类的头文件中,可以含有变量,在需要发射信号的时候使用命令emit signal()即可实现信号的发射;slot_continue()槽函数的定义可以像普通的函数一样定义在received类的头文件中,也可含有变量,其中变量的类型需要和singal()中参量的类型一致,需要执行signal()信号的位置调用该槽即可。需要指出的是这个类和槽函数的连接应该在主函数中建立。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值