QT RTTI 运行时类型识别技术

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(editor);
if(startEditor  != NULL)
{
	// 在此处写功能代码
}

Qobject::inherits()

与qobject_cast不同,Qobject::inherits()按树接收一个char* 类型名,而不是一个表达式,这里还是直接上代码吧:

// Qobject::inherits()
Qwidget *w = &s;
if(w->inherits("QListView"))
{
	// 在此处写功能代码
}

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