如何使用qRegisterMetaType通过类名字符串注册类?
how to use qRegisterMetaType to register a class by string of class name?
>我只有一个包含类名的字符串。
是否可以仅通过类名字符串将该类注册到 qt 元类型?
当然,由于在注册之前,QMetaType::type(const char *typeName)
返回 unknowntype,因为类尚未注册。
简短的回答:不。
长答案:不,要在某处注册类型,您至少需要该类型。听起来很有意义,对吧?
你知道我的名字,你知道我高不高吗?不,你应该看到我知道这一点。类型系统可以从其名称中猜测出什么类型?该类型的成员函数是否foo
?是不是豆荚?除非您显式提供实际类型,否则它无法知道这一点。名称或别名什么也没说,只有在您之前注册过的情况下才能用于检索它。
考虑qRegisterMetaType
的具体情况。
其中一个重载是可用于为类型创建别名的函数模板,表单为:
qRegisterMetaType<Type>("alias");
也就是说,它想知道您要为其声明某些内容的类型。
周围的另一个重载具有几乎相同的形式,但因为它不接受字符串。
它们都需要类型,如果您以前没有注册过它,则无法神奇地将其从字符串中取出。