Qt模块化笔记之core——使用信号与槽

信号(signal)与槽(slot)就像插头与插座,有些不同的是,信号可以连接多个槽,槽也可以被多个信号连接。

Qt中的信号形式上像是一个函数,不需要具体实现,槽也是一个函数,需要书写内部的执行代码。信号一触发,所连接的槽函数就执行。

它们之间用语句connect连接:

当前Qt5版本有传统的信号槽与新推出的两种,使用形式分别如下:

QObject::connect(sender, SIGNAL(signalName(T)), receiver, SLOT(slotFunction(T)));
QObject::connect(&sender, &sender::sinal,&receiver, &receiver::slotFunction);

QObject部分可省略,它也表明connect 像是QObject的一个函数。不是QObject就不能使用信号槽。

SIGNAL与SLOT是传说中的宏了,本篇倾向于初学者,不讨论。记住两种形式。

新推出的方法中,&表示引用。在连接信号槽之前,对象要已经存在。

用汉语表示的形式:

传统形式:QObject::connect(信号发送者,SIGNAL(信号名(参数1,参数2))),信号接收者,SLOT(槽函数(参数1,参数2));

新式形式,省略了两个宏。而且参数部分不需要写了。信自动一一对应传递。


查看下面两个类的声明代码:

#include <QObject>

class Sender : public QObject
{
    Q_OBJECT
public:
    Counter();
signals:
    void valueChanged(int Value);
};


#include <QObject>

class Receiver: public QObject
{
    Q_OBJECT
public:
    Counter();
public slots:
    void setValue(int value);
};


要使用信号槽机制,必需让你定义的类继承自QObject或它的子类,而且需要在声明最顶部放上Q_OBJECT宏。就像上面那样。

那connect放在哪?一般在函数的构造函数中使用它,类一初始化完成,信号槽就连接好。当然也可以临时连接。

使用如下:


Sender a;
Receiver b;
    QObject::connect(&a, &Sender ::valueChanged,
                     &b, &Receiver ::setValue);
    //connect(a, SIGNAL(valueChanged(int)), b, SLOT(setValue(int)));





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值