我们来看信号的发起过程,先来看一个宏定义:# define emit
,这个宏定义将emit定义为空,也就是说你在emit mysignal()的时候,这行代码其实就是mysignal(),所以信号就是函数,只是换了个概念而已!
废话不多说,来DEBUG:
我们在11行打断点F11进入:
// SIGNAL 0
void MyWidget::mysignal()
{
QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
}
居然直接调用了moc文件中的mysignal函数,现在是不是更清楚信号就是函数了啊?这里的this是MyWidget对象,staticMetaObject就是第二章提到的静态QMEtaObject,其余都是空。进入active函数之前回去