9.SignalAndSlot

 

/*
1) 信号的定义必须在signals:保留字下,并且不需要实现
2)槽的定义必须在slots:保留字下,需要实现
3)信号和槽通过QObject::connect函数连接
4)当信号被触发时,槽函数被调用

需要注意的是:
1)信号和槽,是QT的拓展,所以实现信号和槽的类,必须是QObject的子类
2)实现信号和槽的类,必须以宏Q_OBJECT开始
3)连接信号和槽,要用到SIGNAL和SLOT宏,转换函数为字符串
4)一个信号可以和多个槽连接,槽函数调用的顺序是不确定的
5)多个信号可以同时连接一个槽
6)信号可以连接信号,形成信号传导
7)信号和槽的参数应该一样多,而且类型必须相同
8)信号和槽都可以重载
9)信号和槽都可以有默认参数
10)槽函数可以像普通函数一样被调用
11)在槽函数中,调用sender可以获得信号调用者

总结下:
一个类:QObject
三个宏:Q_OBJECT SIGNAL SLOT
三个保留字:signals, slots, emit
*/

 



#include <QCoreApplication>
#include "mysignal.h"
#include "myslot.h"

/*
1) 信号的定义必须在signals:保留字下,并且不需要实现
2)槽的定义必须在slots:保留字下,需要实现
3)信号和槽通过QObject::connect函数连接
4)当信号被触发时,槽函数被调用

需要注意的是:
1)信号和槽,是QT的拓展,所以实现信号和槽的类,必须是QObject的子类
2)实现信号和槽的类,必须以宏Q_OBJECT开始
3)连接信号和槽,要用到SIGNAL和SLOT宏,转换函数为字符串
4)一个信号可以和多个槽连接,槽函数调用的顺序是不确定的
5)多个信号可以同时连接一个槽
6)信号可以连接信号,形成信号传导
7)信号和槽的参数应该一样多,而且类型必须相同
8)信号和槽都可以重载
9)信号和槽都可以有默认参数
10)槽函数可以像普通函数一样被调用
11)在槽函数中,调用sender可以获得信号调用者

总结下:
一个类:QObject
三个宏:Q_OBJECT SIGNAL SLOT
三个保留字:signals, slots, emit
*/

int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);

    MySignal sig;
    MySlot slot;

    QObject::connect(&sig, SIGNAL(sig()), &slot, SLOT(slot()));

    emit sig.sig();

    return app.exec();
}
#ifndef MYSLOT_H
#define MYSLOT_H

#include <QObject>

class MySlot : public QObject
{
    Q_OBJECT
public:
    explicit MySlot(QObject *parent = 0);

signals:

public slots:
    void slot();

};

#endif // MYSLOT_H
#include "myslot.h"
#include <QDebug>

MySlot::MySlot(QObject *parent) :
    QObject(parent)
{
}

void MySlot::slot()
{
    qDebug() << "MySlot::slot is called";
}
#ifndef MYSIGNAL_H
#define MYSIGNAL_H

#include <QObject>

class MySignal : public QObject
{
    Q_OBJECT
public:
    explicit MySignal(QObject *parent = 0);

signals:
    void sig();

public slots:

};

#endif // MYSIGNAL_H
#include "mysignal.h"

MySignal::MySignal(QObject *parent) :
    QObject(parent)
{
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值