executesequence.h
#ifndef EXECUTESEQUENCE_H
#define EXECUTESEQUENCE_H
#include <QObject>
class Parent : public QObject
{
Q_OBJECT
public:
explicit Parent(QObject *parent = 0);
virtual ~Parent(){}
public slots:
void value(int);
signals:
void valueChanged(int);
};
class Son : public Parent
{
Q_OBJECT
public:
explicit Son(QObject *parent = 0);
virtual ~Son(){}
public slots:
void value(int);
};
class GrandSon : public Son
{
Q_OBJECT
public:
explicit GrandSon(QObject *parent = 0);
virtual ~GrandSon(){}
public slots:
void value(int);
};
#endif // EXECUTESEQUENCE_H
executesequence.cpp
#include "executesequence.h"
#include <QDebug>
Parent::Parent(QObject *parent)
{
QObject::connect(this, SIGNAL(valueChanged(int)),this, SLOT(value(int)));
}
void Parent::value(int value)
{
qDebug() << "parent: " << value;
}
Son::Son(QObject *parent)
{
QObject::connect(this, SIGNAL(valueChanged(int)),this, SLOT(value(int)));
}
void Son::value(int value)
{
qDebug() << "Son: " << value;
}
GrandSon::GrandSon(QObject *parent)
{
QObject::connect(this, SIGNAL(valueChanged(int)),this, SLOT(value(int)));
}
void GrandSon::value(int value)
{
qDebug() << "GrandSon: " << value;
}
main.cpp
#include <QApplication>
#include "executesequence.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GrandSon grandSon;
grandSon.valueChanged(1);//槽执行顺序:父->子->孙
return app.exec();
}