QT QObject分析
看了上面大佬写的东西,自己也总结一下吧,元对象系统中实现了很多功能,有信号槽机制,将信号,槽,qt 的一些宏转化为 moc_*.h文件,而且其中的信号和槽连接,是通过字符串连接的,然后通过存储的数据,在函数中判断所类型,和取得的序列号,然后通过switch case到达相应的槽。
值得注意的点:
-
而槽所对应的参数比信号要少,会自动获得较少的。
-
对于sender()而言,尽量不要使用,因为在采用queue连接时,会获得一个空的对象。
-
对于一般的连接采用postevent()的方式,或者回调的方式。当跨线程时,尽量采用
QueuedConnection
而,是在要阻塞运行,采用BlockingQueuedConnection
的方式。以前是从来没有发现过BlockingQueuedConnection
和DirectConnection
两者的区别,现在发现只是前者只能用在线程中。 -
对于emit而言 是一个空的宏,而qt将其转化为moc_*.h文件,而qt而言,首先将参数,转化为void,然后讲通过一个自己的元对象存储系统中的序号的方式,交给对方的元对象系统解决或者有存储到那个槽函数则调用。期间还有通过连接方式的不同,调用方式也不同。
void _a[] = { Q_NULLPTR, const_cast<void>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject,