一起看代码来玩玩QT之09 Signal and SLOT ( 信号和槽)

来源:互联网 发布:淘宝店铺代销货源 编辑:程序博客网 时间:2024/06/04 08:11


main.cpp


#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();}


mysignal.h

#ifndef MYSIGNAL_H#define MYSIGNAL_H#include <QObject>class MySignal : public QObject{    Q_OBJECTpublic:    explicit MySignal(QObject *parent = 0);signals:    void sig(); //必须在signals 下 且不需要实现public slots:};#endif // MYSIGNAL_H


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_OBJECTpublic:    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";}





1 0