05_自定义信号和槽

    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

    /*
    **FileName:main.cpp
    */
    #include "myslot.h"
    #include "mysignal.h"
    
    
        MySignal sig ;
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
    
        MySlot slot ;
        QObject::connect( &sig , SIGNAL( sig() ) , &slot , SLOT(slot()) ) ;
    
        QPushButton button("button") ;
        QObject::connect( &button , &QPushButton::clicked , [&](){
            emit sig.sig() ;    
        } ) ;
        button.show( );
    
        return a.exec();
    }
    
    /*
    **FileName:MySlot.cpp
    */
    #pragma once
    #include "qobject.h"
    #include "MyButton.h"
    
    class MySlot:public QObject{
    
        Q_OBJECT
    public:
        explicit
        MySlot(QObject *parent = 0):QObject(parent) {}
        ~MySlot() {}
    signals:
    public slots:
        void slot()  {
            qDebug()<<"myslot";
        }
    };
    
    /*
    **FileName:MySignal
    */
    #include "qobject.h"
    #include "MyButton.h"
    
    class MySignal:public QObject{
    
        Q_OBJECT
    public:
        explicit
            MySignal(QObject *parent = 0):QObject(parent){}
        ~MySignal() {}
    signals:
        void sig() ;
    public slots:
    
    } ;
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值