QT RTTI 运行时类型识别技术
除了C++为我们提供的两种RTTI运算符(dynamic_cast 和 typeid)外,qt也为我们提供了两种运行时类型识别机制:
(1)qobject_cast
(2)Qobject::inherits()
qobject_cast
qobject_cast 与 C++ 标准库中的dynamic_cast 类似,都是一个类型转换运算符,是一个向下转换运算符
qobject_cast 的参数受限于ObjectType*,其中ObjectType类是QObject的派生类并且完全由moc进行处理(这需要其类定义中由Q——OBJECT宏)
qobject_cast 允许把一个更为常规的指针和引用转换成某种特定的类型。
// qobject_cast
QWidget * editor = new StartEditor;
StartEditor * startEditor = qobject_cast<StartEditor *>(editor);
if(startEditor != NULL)
{
// 在此处写功能代码
}
Qobject::inherits()
与qobject_cast不同,Qobject::inherits()按树接收一个char* 类型名,而不是一个表达式,这里还是直接上代码吧:
// Qobject::inherits()
Qwidget *w = &s;
if(w->inherits("QListView"))
{
// 在此处写功能代码
}