2020-11-23 信号与槽细节
2022-03-06 本文已影响0人
hangzhou吴彦祖
1:
们知道C++中的函数要有声明(declare),也要有实现(implement),
而信号只要声明,不需要写实现。这是因为moc会为我们自动生成。
QObject宏 生成moc.cpp文件 对一个静态变量staticMetaObject进行实现;
staticMetaObject是一个结构体,用来存储Tom这个类的信号、槽等元信息,并把
qt_static_metacall静态函数作为函数指针存储起来。因为是静态成员,所以实例化多少个Tom对象,它们的元信息都是一样的。qt_static_metacall函数提供了两种“元调用的实现”:
如果是InvokeMetaMethod类型的调用,则直接 把参数中的QObject对象,
转换成Tom类然后调用其miao函数如果是IndexOfMethod类型的调用,即获取元函数的索引号,则计算miao函数的偏移并返回。
voidTom::miao(){QMetaObject::activate(this,&staticMetaObject,0,nullptr);}