前面的博文有提到过,用map实现C++伪反射法,其实还有好多玩法,QT中,可以模拟全局消息等等。
注册示例:
QEos::Attach("UnitMetaMgrChangeName", this, SLOT(onUnitMetaMgrChangeName(const QVariantList&)));
槽函数:
void LinkGraphScene::onUnitMetaMgrChangeName(const QVariantList& va)
{
QString oldName = va[0].toString();
QString newName = va[1].toString();
}
呼应示例:
QEos::Notify("UnitMetaMgrChangeName", QVariantList() << oldName << name);
QEos::Notify("MainFlowModuleQuit", QVariantList() << true);
这样做的好处有:
1:类似于PostMessage全局项目呼应
2:QT队列消息,不用担心影响UI界面卡顿问题
槽函数里可以直接进行处理
当然也不是没有缺点:
多线程循环中,要注意,connect,disconnect的处理,否则容易引起内存泄漏和野指针。