如何使用qRegisterMetaType通过类名字符串注册类?

how to use qRegisterMetaType to register a class by string of class name?

本文关键字:字符串 注册 何使用 qRegisterMetaType      更新时间:2023-10-16

>我只有一个包含类名的字符串。

是否可以仅通过类名字符串将该类注册到 qt 元类型?

当然,由于在注册之前,QMetaType::type(const char *typeName)返回 unknowntype,因为类尚未注册。

简短的回答:不。
长答案:不,要在某处注册类型,您至少需要该类型。听起来很有意义,对吧?

你知道我的名字,你知道我高不高吗?不,你应该看到我知道这一点。类型系统可以从其名称中猜测出什么类型?该类型的成员函数是否foo?是不是豆荚?除非您显式提供实际类型,否则它无法知道这一点。名称或别名什么也没说,只有在您之前注册过的情况下才能用于检索它。


考虑qRegisterMetaType的具体情况。
其中一个重载是可用于为类型创建别名的函数模板,表单为:

qRegisterMetaType<Type>("alias");

也就是说,它想知道您要为其声明某些内容的类型。
周围的另一个重载具有几乎相同的形式,但因为它不接受字符串。
它们都需要类型,如果您以前没有注册过它,则无法神奇地将其从字符串中取出。