1.信号只有函数声明;信号的返回类型都是void;
2.槽就是普通的C++ 成员函数,可以被正常调用,会受到 public、private、protected 的影响;槽可以有参数,但槽的参数不能有缺省值;
3.emit 在恰当的代码位置发送信号;
4.信号槽继承于QObject类;类头文件中必须标记Q_OBJECT的类声明;
5.一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的;
6.宏定义不能用在 signal 和 slot 的参数中;
#include <QObject>
// A.h
class A: public QObject
{
Q_OBJECT
public:
A(const QString & name) :
m_name(name)
{
}
void send()
{
emit newSignal(m_name);
}
signals:
void newSignal(const QString &name);
private:
QString m_name;
};
// B.h
#include <QObject>
#include <QDebug>
class B: public QObject
{
Q_OBJECT
public:
B() {}
void receive(const QString & name)
{
qDebug() << "Receives Cap: " << name;
}
};
// main.cpp
#include <QCoreApplication>
#include "A.h"
#include "B.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
A a("A");
B b;
QObject::connect(&a, &A::newSignal, &b, &B::receive);
a.send();
return app.exec();
}