依赖于 QOBJECT 宏 生成的 staticMetaObject 这个QMetaObject静态变量。
qobject_cast<Type> (A) 转换的时候 会去拿到Type类型的 staticMetaObject 去做cast。
这个时候会去拿 A 的 staticMetaObject 和 Type 的staticMetaObject 作比较 判断A的staticMetaObject 和 Type 的staticMetaObject是否在一条链路上。
因为metaObject()是一个虚函数,所以A->metaObject() 拿到的就是创建出来的继承链条中最下面的类型。如果Type的staticMetaObject 在A->metaObject()的inherits上,说明就能转换成功。
QObject 只支持单继承,如果多继承链条里面包含了超过一个QObject 就会报错,并且多继承的时候含QObject对象要放到第一个位置