C++ 如何使用qRegisterMetaType按类名字符串注册类?

C++ 如何使用qRegisterMetaType按类名字符串注册类?,c++,qt,metadata,C++,Qt,Metadata,我只有一个包含类名的字符串 是否可以仅通过类名字符串将该类注册到qt元类型 当然,在注册之前,QMetaType::type(const char*typeName)返回unknowntype,因为类尚未注册。简短回答:否。 详细回答:不,要在某个地方注册一个类型,您至少需要该类型。听起来很有意义,对吧 你知道我的名字,你知道我高不高吗?不,你应该看到我知道这一点。一个类型系统可以从一个类型的名称猜出它是什么?该类型是否具有成员函数foo?它是不是一个豆荚?除非显式提供实际类型,否则它无法知道。

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

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

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

简短回答:否。
详细回答:不,要在某个地方注册一个类型,您至少需要该类型。听起来很有意义,对吧

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


考虑以下具体情况。
重载之一是可用于创建类型别名的函数模板,其形式为:

qRegisterMetaType<Type>("alias");
qRegisterMetaType(“别名”);
也就是说,它想知道要为其声明内容的类型。
另一个重载几乎具有相同的形式,但它不接受字符串。

它们都需要类型,如果您以前没有注册过,就无法神奇地将其从字符串中取出。

而且该类应该已经由Q_DECLARE_METATYPE声明。谢谢。因此,我们必须先使用qRegisterMetaType注册一个自定义类型,然后QMetaType::type(const char*typeName)将能够从元数据中找到正确的类型。