转载自http://blog.csdn.net/crazyman2010/article/details/6055863
//A.h//
#ifndefA_H
#define A_H
#include <QObject>
#include<QDebug>
class A :public QObject
{
Q_OBJECT// 必需的
public:
void sendselfsignal(void)// 发送自定义信号
{
qDebug("object a send signal s");
emit s();
}
signals: //自定义信号, 如果要自定义保护信号, 就在protected: 后声明.
//自定义信号只需要在这里声明, 然后将槽连接到信号即可,无需实现信号函数.信号函数与槽函数的返回值类型在任何时候都可以不同; 而且如果不关心信号传递下来的参数, 信号函数与槽函数的参数列表也可以不相同, 但是如果要访问信号传递下来的任何参数时, 信号函数与槽函数的参数列表必须相同.
void s();// 自定义信号
};
#endif // A_H
//B.h//
#ifndef B_H#define B_H#include"A.h"class B :public QObject//:public A{
Q_OBJECT// 必需的public:B(A* pa){connect(pa,SIGNAL(s()),this,SLOT(recvs()));// 关联信号和槽}public slots:void recvs()// 自定义槽{qDebug("in object b,recved s");}};
#endif // B_H//main.cpp//
#include <QtCore/QCoreApplication>#include"A.h"#include"B.h"int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);A test;B b(&test);test.sendselfsignal();return a.exec();}
运行结果如下图所示