У меня есть простой объект, полученный из QObject:
class MyObject : public QObject {
Q_OBJECT
public:
MyObject(QObject* parent = 0);
};
MyObject::MyObject(QObject* parent) : QObject(parent) {
std::cout<<"[BASE] "<<this->metaObject()->className()<<std::endl;
}
И я дополнительно получаю этот объект:
class MyDerivedObject : public MyObject {
Q_OBJECT
public:
MyDerivedObject(QObject* parent);
};
MyDerivedObject::MyDerivedObject(QObject* parent) : MyObject(parent) {
std::cout<<"[DERIVED] "<<this->metaObject()->className()<<std::endl;
}
Всякий раз, когда я создаю экземпляр этого класса, я получаю следующий вывод:
MyDerivedObject y;
## OUTPUT ###
[BASE] MyObject
[DERIVED] MyDerivedObject
Я не понимаю.Поскольку иерархия наследования имеет вид MyDerivedObject
-> MyObject
-> QObject, они оба имеют один и тот же экземпляр QObject в качестве родителя (верно?).Я знаю, что большая часть информации о типах во время выполнения предоставляется через moc , но это не должно изменить тот факт, что как только я сделаю static_cast<QObject*>(/*MySomeObject*/)
для указателя на один из этих объектов, онито же самое (даже в памяти), если речь идет о функциональности QObject.Тогда почему я получаю разные возвращаемые значения className()
?В любом случае, как мне получить имя типа, к которому фактически относится QObject?