Qt学习-信号与槽

Qt学习-信号与槽

本章节将介绍使用Qt4信号与槽。信号与槽作为QT的核心机制在QT编程中有着广泛的应用,因为信号与槽是Qt里面的最基础而且是最重要的部分。

  • 信号槽是啥?

古有“烽火狼烟”传递消息,敌人来犯的消息迅速传达开来,是多么的聪慧啊。在烽火台上点燃“燃料”,烟就是信号;下一个燃火台看到烟后就点燃燃料,这个就槽。

比如:一个按钮被点击了,会触发一个点击的信号,槽是指收到信号之后做什么。

专业点说你可以从设计模式上理解,其实就是观察者模式。信号是“主题”,每个槽是“观察者”。当发出信号的时候,对该信号感兴趣的槽就会被触发,简单点说信号类似广播,每个槽都可以听到这个广播,但是只有你连接过的槽才会去接收这个信号,并作出相应的操作。

信号(Signal):就是在特定情况下被发射的事件

槽(Slot):就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。

  • 查看Qt中的信号与槽

(1)打开Qt-Create,点击帮助按钮

 

(2)到了帮助页,点击切换成索引,在查找里面输入需要查询的控件名,并回车,显示查询的结果

(3)查看QPushButton类时,在内容页中未看到具体的信号槽类,这时候需要到它的基类中查找

 

(4)这时候就能在基类中查找到对应的公有信号和槽,点击他们跳转到对应的可用的信号和槽

(5)点击上图的信号/槽,就会跳到具体的位置。

 

  • Qt中的信号与槽的关联

使用QT开发时,通常使用connect函数关联信号与槽,在帮助文档中的基本格式是

简写可以写成:

connect(Sender,SIGNAL(signal),Receiver,SLOT(slot));

其中,sender 是发射信号的对象的名称,signal() 是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。receiver 是接收信号的对象名称,slot() 是槽函数的名称,需要带括号,有参数时还需要指明参数。

SIGNAL 和 SLOT 是 Qt 的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。

 

Qt Creator信号槽示例

为了体验一下信号槽的使用,我们以一段简单的代码说明: 

新建一个Qt-QWidget工程(关于新建工程步骤参考qt-环境搭建与测试)

标准信号槽使用

(1)创建好工程后,双击进去mywidget类中

(2)创建好工程后,在MyWidget类中,包含按钮的头文件#include <QPushButton>,并且创建QPushButton的按钮指针对象。

 

(3)切换到MyWidget类的Cpp中,也可以使用快捷键 “F4”,初始化窗体和创建按钮对象,并初始化按钮参数,如图:

(4)标准信号槽的使用,利用connect函数,当按钮按下时,也就是pressed通过F1帮助文档查询,关闭窗口,如果所示:

 

自定义槽函数使用

有时候,我们希望按下按钮后实现自己的功能,那么在这里就需要用到自定义槽函数

(1) 切换到MyWidget类的h中,要使用自定义槽函数,必须加上public slots关键字,并设置槽函数,这里创建第二个按钮用于演示,如图所示:

(2) 切换到MyWidget类的cpp中,初始化按钮b2,并且b2的点击事件关联到刚才写的自定义槽函数,自定义槽函数可以是任意的成员函数,必须和信号的参数和返回值保持一致,没有返回值

(3) 实现自定义槽mySlotTest 的功能,改变按钮b1的文字

(4) 查看测试结果

信号槽总结:

  1. 发送者和接收者都需要是QObject的子类
  2. 信号是一个函数声明,返回 void,不需要实现函数代码
  3. 槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;
  4. 使用QObject::connect()函数连接信号和槽。

     Qt5在语法上兼容Qt4

     格式:

     connect(sender, &Send::signal, receiver, &Receiver::slot);

    connect(信号发出者对象(指针), &className::clicked, 信号接收者对象(指针), &classB::slot);

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值