我一直试图让我自己的矢量库成为QT中的元类型,通过教程他们教我Q_DECLARE_METATYPE(class)
。但是我的班级是一个模板。我一直在寻找并找到一个未记录的宏Q_DECLARE_METATYPE_TEMPLATE_1ARG()
,但是我发现了一个关于它的错误报告,并且没有关于它是否被修复的反馈。我尝试过使用它仍然没有注册。原因是在我的Shader
类游戏引擎中,我存储了制服,并且根据制服,它将值存储为QVariant
。这就是我遇到问题的地方。有谁知道如何为QMetatypes
注册模板?
答案 0 :(得分:2)
Qt使用你在内部提到的宏,还有一个2参数版本。 QtCore/qmetatype.h
显示了一些使用示例。我不确定为什么它不能按预期工作,我需要看到你的代码才能找到更多。
但是,有一种可以接受的解决方法:如果您知道将要使用的所有可能的模板参数,则可以显式声明每个模板实例化为元类型。例如,如果您的模板类名为Foo<T>
,并且您知道您将仅使用Foo<int>
和Foo<float>
,则可以注册这些:
Q_DECLARE_METATYPE(Foo<int>)
Q_DECLARE_METATYPE(Foo<float>)