gpt4 book ai didi

c++ - 如何解决继承类中注册的 Q_ENUM?

转载 作者:行者123 更新时间:2023-11-30 03:17:21 26 4
gpt4 key购买 nike

我有以下类(class):

class A : public QObject
{
Q_OBJECT
public:
enum testEnum
{
one= 1,
two= 2
};
Q_ENUM(testEnum)
};

我还有一个继承自第一个类的第二个类:

 class B : public A
{
Q_OBJECT
public:
Q_ENUMS(A::testEnum)
};

如果我现在在第三个类中包含类 B 并尝试使用

 static int l_enumIdx = B::staticMetaObject.indexOfEnumerator("A::testEnum");

失败了!如何注册 Q_ENUMS 权限并使用 QMetaObject::indexOfEnumerator() 正确访问它?或者是否有更好的方法来构建此类枚举结构并注册它们?

最佳答案

您不必使用 A:: 作为 indexOfEnumerator() 参数的一部分,同样来自 Qt 5.5你必须使用 Q_ENUM:

static int l_enumIdx = B::staticMetaObject.indexOfEnumerator("testEnum");
qDebug()<< l_enumIdx;

输出:

0

此外,如果您已经在基类中使用 Q_ENUM 注册了枚举,则不必在派生类中进行注册。


派生类的枚举与基类相同:

qDebug() << (B::testEnum::one == A::testEnum::one);

输出:

true

关于c++ - 如何解决继承类中注册的 Q_ENUM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55590011/

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