Я недавно столкнулся с той же проблемой. Я нуждался в метаобъекте без необходимости создавать экземпляр самого класса. Лучшее, что я мог сделать, - это создать глобальную / статическую функцию, которая получает объект qmetaobject с указанным именем класса. Я добился этого с помощью QObject :: staticMetaObject.
QMetaObject GetMetaObjectByClassName(QString strClassName)
{
QMetaObject metaObj;
if (strClassName.compare("MyClass1") == 0)
{
metaObj = MyClass1::staticMetaObject;
}
else if (strClassName.compare("MyClass2") == 0)
{
metaObj = MyClass2::staticMetaObject;
}
else if (strClassName.compare("MyClass3") == 0)
{
metaObj = MyClass3::staticMetaObject;
}
else if (strClassName.compare("MyClass4") == 0)
{
metaObj = MyClass4::staticMetaObject;
}
else if (strClassName.compare("MyClass5") == 0)
{
metaObj = MyClass5::staticMetaObject;
}
// and so on, you get the idea ...
return metaObj;
}
См .: http://doc.qt.io/qt-5/qobject.html#staticMetaObject-var
Если у кого-то есть лучший вариант, пожалуйста, поделитесь!