Qt:信号

Qt的信号本质是函数,且默认也只能为公有函数(这样可以在任何地方进行信号发送)

前置条件

Qt的信号支持需要Qt的元对象系统的支持,元对象系统需要一下条件

  1. 类必须继承与QObject
  2. 类内必须私有声明Q_OBJECT宏
  3. 需有元对象编译器(moc)

声明和实现

在我们定义的元对象类中可以进行信号的声明,默认形式为 :

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);
}

你可能感兴趣的:(qt,qt)