Qt的信号本质是函数,且默认也只能为公有函数(这样可以在任何地方进行信号发送)
Qt的信号支持需要Qt的元对象系统的支持,元对象系统需要一下条件
在我们定义的元对象类中可以进行信号的声明,默认形式为 :
void mySignal(paramterLists);//返回值只能是void
注意我们代码内只能进行信号的声明,不能写定义。定义是使用元对象系统自动生成的。
当cpp文件编译时,若监测到类的声明中包含Q_OBJECT宏,就会使用元对象编译器创建一个新的以moc_开头的cpp源文件,该源文件会参与到编译和链接中,该源文件内部会有信号的实现。
例如下面的函数,就是自动生成的文件moc_myTest.cpp中的信号定义。
void PlotsPanel::show_a_text_message(QString _t1)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 6, _a);
}