通常我在 Qt 元系统中注册我的类,如下所示:qRegisterMetaType<Foo>();
但是,我注意到有些人写了qRegisterMetaType<Foo*>();
这是否等效?或者如果我想使用指针,我是否必须两者都做Foo
?
那么这有意义吗?
qRegisterMetaType<Foo>();
qRegisterMetaType<Foo *>();
如何在从 QObject 派生的类上正确使用qRegisterMetaType ?, 但不完全
-- 编辑:到目前为止有趣的答案,谢谢 --
好的,关于到目前为止所说的,我得出以下结论:我想将我的类用作指针和值,所以我注册了两者。代码编译。
我的课程如下所示:
class Foo1 : public Bar {}
class Foo2 : public Bar {}
当我只注册类型时,一切正常:
qRegisterMetaType<Foo1>();
qRegisterMetaType<Foo2>();
但是当我注册时:
qRegisterMetaType<Foo1*>();
qRegisterMetaType<Foo2*>();
代码编译,但在运行时我得到:
QMetaType:registerTypedef: Binary compatibility break -- Type name Bar* previously registered as typedef of Foo1 [1234], now registering as typedef of Foo2 [1235]
所以注册为指针似乎做了一些不同的事情。在我的特殊情况下,我无法同时注册两者。