gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:04 24 4
gpt4 key购买 nike

通常我像这样在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com