6.QT信号和槽


  1. 新建项目SignalAndSlot项目

编写代码如下:

mysignal.h

#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.cpp

#include "mysignal.h"

 

MySignal::MySignal(QObject *parent) :

    QObject(parent)

{

}

myslot.h

        #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

myslot.cpp

#include "myslot.h"

#include <QDebug>

 

MySlot::MySlot(QObject *parent) :

    QObject(parent)

{

}

 

void MySlot::slot()

{

    qDebug() << "MySlot::slot is called";

}

Main.cpp

#include <QCoreApplication>
#include "mysignal.h"
#include "myslot.h"
 
/*
 *1)信号的定义必须在signals:保留字下,并且不需要实现
 *2)槽的定义必须在slots:保留字下,需要实现
 *3)信号和槽通过QObject::connect函数连接
 *4)当信号被触发是,槽函数被调用
 *
 *需要注意的是:
 *1) 信号的定义必须在signals:保留字下,并且不需要实现
 *2)槽的定义必须在slots:保留字下,需要实现
 *3)信号和槽通过QObject::connect函数连接
 *4)当信号被触发时,槽函数被调用
 *
 *需要注意的是:
 *1)信号和槽,是QT的拓展,所以实现信号和槽的类,必须是QObject的子类
 *2)实现信号和槽的类,必须以宏Q_OBJECT开始
 *3)连接信号和槽,要用到SIGNALSLOT宏,转换函数为字符串
 *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;
 
    //通过QObjectconnect实现信号和槽函数之间的关联,
    //当调用了信号之后槽函数也相应的被调用了
    QObject::connect(&sig, SIGNAL(sig()), &slot, SLOT(slot()));
    //通过下面一行实现发射一个信号
    emit sig.sig();
    return app.exec();
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涂作权的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值