c++ - qRegisterMetaType - 类、类*或两者

标签 c++ qt metaclass

通常我像这样在 Qt 元系统中注册我的类:qRegisterMetaType<Foo>();

然而,我注意到有些人写 qRegisterMetaType<Foo*>();这是等价的吗?或者如果我想将指针与 Foo 一起使用,我是否必须同时执行这两项操作? ?

那么这有什么意义吗?

qRegisterMetaType<Foo>(); qRegisterMetaType<Foo *>();

How to properly use qRegisterMetaType on a class derived from QObject? 部分回答, 但不完全

-- 编辑:到目前为止有趣的答案,谢谢 --

好的,关于到目前为止所说的,我得出了以下结论:我想将我的类同时用作指针和值,所以我将两者都注册了。代码编译。

我的类(class)是这样的:

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]

所以注册为指针似乎做了一些不同的事情。在我的特殊情况下,我无法同时注册。

最佳答案

不,它们不等价。 FooFoo*是不同的类型,需要分别注册。如果你只想用元类型系统存储指向 Foo 的指针,那么使用 qRegisterMetaType<Foo *>(); .如果两者都需要,请同时注册。

通常,如果您的类无法被复制,您只会注册指针形式,例如 QObject 的情况。和衍生品,但这取决于您的要求。

关于c++ - qRegisterMetaType - 类、类*或两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379355/

相关文章:

python - 在 PyQt4 中显示视频流的最佳方式是什么?

python - Qt 获取从子菜单中单击的操作

python - 如何在不显式导入的情况下使新装饰器在类中可用?

c++ - FastCGI、Apache 和 C++

c++ - 类不可访问指针

c++ - 如何在初始 show() 之后将小部件添加到 QSplashScreen?

ios - 如何将带有类名称的字符串转换为类类型本身?

c++ - 删除列表控件 (MFC) 中的重复项

c++ - 将 native WebRTC 应用程序与 Visual Studio 链接

python - 使用元类来跟踪 python 中的实例