QT 信号与曹

信号与曹

信号与曹为对象之间的通信提供了方便。信号(signal)就是信号源发出的信号,曹(slot)是信号的接收端,信号与曹之间需要建立连接才能通信。如果要使用信号与曹必须在类定义中包含Q_OBJECT宏而且必须继承QObject类或者其子类。信号与信号之间可以建立连接,信号与曹之间的关系可以是一对一,一对多,多对多。例如:
signalAndSlot.h
#include <QObject>
class SignalAndSlot : public QObject
{
    Q_OBJECT
public:
    explicit SignalAndSlot(int v,QObject *parent = 0);
    int getValue();
signals:
    void valueChanged(int newValue);
public slots:
    void setValue(int newValue);
private:
    int value;
};

signalAndSlot.cpp
#include "signalandslot.h"
SignalAndSlot::SignalAndSlot(int v,QObject *parent) :
    QObject(parent)
{
  value=v;
}
int  SignalAndSlot::getValue()
{
    return value;
}
void SignalAndSlot::setValue(int newValue)
{
    value=newValue;
    emit valueChanged(newValue);
}
 
 
main.cpp
#include <QtGui/QApplication>
#include "signalandslot.h"
#include <QDebug>
int main(int argc, char *argv[])
{
    
QApplication a(argc, argv);
    SignalAndSlot x(5);
    SignalAndSlot y(6);
    SignalAndSlot z(7);
    QObject::connect(&x,SIGNAL(valueChanged(int)),&y,SIGNAL(valueChanged(int)));
   //x的信号与y的信号连接
    QObject::connect(&y,SIGNAL(valueChanged(int)),&z,SLOT(setValue(int)));
  //y的信号与z的曹连接
    
    x.setValue(10);//改变x的值将发出一个信号,y接受到之后直接发出该信号,最后z接收到y发送的信号而改变z的值。
    qDebug()<<"x="<<x.getValue()<<"  y="<<y.getValue()<<"  z="<<z.getValue();
    return a.exec();
}

输出结果是:x= 10   y= 6   z= 10 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值