如何使用qRegisterMetaType按类名字符串注册一个类?

时间:2017-04-29 04:19:00

标签: c++ qt metadata

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

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

当然,自从注册之前,QMetaType::type(const char *typeName)返回unknowntype,因为该课程尚未注册。

1 个答案:

答案 0 :(得分:0)

简答:不 答案很长:不,要在某个地方注册至少需要类型的类型。听起来很有意义,对吧?

你知道我的名字,你知道我是不是很高?不,因为你应该让我知道这一点。类型系统可以从名称中猜出一个类型?该类型是否具有成员函数foo?是不是一个吊舱?除非您明确提供实际类型,否则无法知道。名称或别名什么都不说,如果您之前已经注册过它们,它们只能用于检索它。

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

qRegisterMetaType<Type>("alias");

也就是说,它想知道你要宣告某事的类型 另一个重载具有几乎相同的形式,但事实上它不接受字符串 它们都需要这种类型,如果你之前没有注册它,就无法神奇地将它从字符串中取出来。