我有以下类(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/