Finding Classes By Meta Information
-
Having registered several class types using the
qRegisterMetaTypefunction, is there any way I'm able to iterate through these registered classes and check for specific type inheritance?I want to build a list of specific classes which derive from a certain base class and then add these into a
QListWidget.Not sure even where to begin.
-
Having registered several class types using the
qRegisterMetaTypefunction, is there any way I'm able to iterate through these registered classes and check for specific type inheritance?I want to build a list of specific classes which derive from a certain base class and then add these into a
QListWidget.Not sure even where to begin.
@webzoid said in Finding Classes By Meta Information:
is there any way I'm able to iterate through these registered classes
I don't believe so, you should keep that information yourself.
check for specific type inheritance?
You can do that. Suppose you have a class
Xthat's registered as a metatype, and you want to check if it's derived from a classY(also registered as a metatype). Then you can pull the meta-object for that class and check it against the one for class Y. Something along those lines (Qt 5.7+):const QMetaObject * xMetaObject = QMetaType::metaObjectForType(qMetaTypeId<X>()); const QMetaObject * yMetaObject = QMetaType::metaObjectForType(qMetaTypeId<Y>()); Q_ASSERT(xMetaObject && yMetaObject); if (xMetaObject->inherits(yMetaObject)) ; // X is derived from Y; else ; // ... it is not -
@kshegunov Thank you for your comprehensive response.
The last bit is very useful but its a shame that I can't iterate through registered meta types. I s'pose I could always have my own function which registers the type into a list (maintaining the
MetaTypeIdfor instance as well as callingqRegisterMetaType.