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

标签 c++ qt qt5

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

相关文章:

c++ - Qt C++ operator == overload Qlist not called

qt - sceneRect 和boundingRect 在哪个坐标上工作?

c++ - QTableView,如何更改拖动多个项目的显示

c++ - c++ 编译器是否将多种算法合并为一个循环?

c++ - 在 C++ 中刷新套接字

C++将字符串传递给varargs

algorithm - 优化 Modbus 请求

c++ - c++中线程的实现

c++ - 通过 const 引用传递 Qt 类

qml - 如何将自定义对象定义为 QAbstractListModel 中的角色?