get the object instance class name using qt’s metaobject system

It is not possible in the constructor of Being because the enclosing object is not constructed yet, therefore metadata about it is not available. However, you can write the initialize method that should be called after the object construction, e.g. with print function:

class Being : public QObject {
    explicit Being(QObject *parent = nullptr) { qDebug() << this->metaObject()->className(); }  // this will always print "Being"
    void initialize() { qDebug() << this->metaObject()->className(); }  // this will print the actual class name

class Animal : public Being {
    explicit Animal(QObject *parent = nullptr) { initialize(); }  // you can already use this method in the constructor

TEST(xxx, yyy)
    Being* being = new Being();
    Being* animal = new Animal();
    animal->initialize();  // or you can call it later

In case initialize method is not good solution, you can always hack it through Being constructor: explicit Being(QString name, QObject* parent = nullptr; and then explicit Animal(QObject *parent = nullptr): Being("Animal") {}, but I think it is less elegant.

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top