在真正开始理解SIGNAL和SLOT之前需要先了解一下QMetaObject的相关知识,本章我们来了解QMetaObject。
QT会为继承自QObject并且有QOBJECT宏的所有对象生成moc_**.cpp文件,也就是说,只要你想使用SIGNAL和SLOT就要继承自QOBject,并且包含QOBJECT宏。
5.9.1版本的moc文件只关心SIGNAL、SLOT函数,5.4的版本的moc文件会包含所有函数。
我们先来看moc中的两个重要的结构体:
struct Q_CORE_EXPORT QMetaObject
{
...//省略一些方法
struct { // private data
const QMetaObject *superdata;//指向父类的QMetaObject对象
const QByteArrayData *stringdata;//
const uint *data;//指向实体类
typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **);//函数指针
StaticMetacallFunction static_metacall;//调用的函数
const QMetaObject * const *relatedMetaObjects;
void *extradata; //reserved for future use