QT学习之signals

QT中增加了signals和slots,即信号与槽,从字面上来看我们也能大概知道这两个概念的意义。信号与槽的作用便是在两者关联后通过发射信号触发槽的反应。

可以一个信号对应一个槽,可以一个信号对应多个槽,也可以多个信号对应一个槽。

虽然相对来说比较简单,但是使用的时候有些地方需要注意。

1.一定要有signals关键字,定义信号时这个关键字不可或缺,比如我们定义一个信号void signal(),一定要在前面加上关键字“signals:”,

signals:

void signal();

就像类中的public、protected、pravate一样,但是一定不能在signals前面加上public、protected、private,

publi signals:

这样写是错误的

2.slots可以写可以不写,一般的函数也可以与signals下的信号关联,我们定义槽函数时可以像signals那样加上slots关键字,也可以不加,但是需要注意的是,如果加上了,那就必须加上public、protected、paivate

public slots:

void func();这样写

slots:

void func();这样写就是错的

当然不加上slots的一般函数也可以与信号关联

3.signals下的函数必须是void类型,而且只需要给出声明即可,具体实现QT内部自己处理,但是槽函数一定要实现,从我们角度思考是这种信号处理是一致的,但是槽函数的功能确实根据我们需要自己设计,所以有了这种差异。

4.信号与槽的参数不能是宏和函数指针

5.信号一般与emit配合使用,使用emit发射信号给关联的槽

6.使用signals/slots必须要加入宏Q_OBJECT

给出一个实例(非自己编写)

a.h

-----------------------------------------------------------------------------------

#ifndef A_H
#define A_H
 
#include <QObject>
 
class A : public QObject
{
    Q_OBJECT
 
signals://定义一个信号
    void signal();
 
public:
    void useSignal(){//使用信号
        emit signal();
    }
 
};
 
#endif // A_H
----------------------------------------------------------------------------------

b.h

---------------------------------------------------------------------------------

 #ifndef B_H
#define B_H
 
#include <QObject>
#include <iostream>
using namespace std;
 
class B : public QObject
{
    Q_OBJECT
public:
    void fun() { //定义一个“槽”
        cout<<"接受对象a的信号,运行对象b的函数。"<<endl;
    }
};
 
#endif // B_H
----------------------------------------------------------------------------------- 

main.cpp

-----------------------------------------------------------------------------------

#include "a.h"
#include "b.h"
 
int main(int argc, char *argv[])
{
    A a;
    B b;
    //连接信号和槽
    QObject::connect(&a,&A::signal,
                     &b,&B::fun);
    //使用信号
    a.useSignal();
    return 0;
}
----------------------------------------------------------------------------------- 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值