【发布时间】:2011-02-24 23:31:40
【问题描述】:
我有一个简单的 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 实际属于的类型的名称?
【问题讨论】:
标签: qt