What is the difference between Q_ENUM and Q_ENUMS

三世轮回 提交于 2019-12-01 00:02:53

问题


I just found multiple examples showing the usage of Q_ENUM and Q_ENUMS and looking into the definition of Q_ENUM showed me that it includes Q_ENUMS and other definitions.

I am not sure which one to write when using the enum in Q_PROPERTY, Qml/QtQuick, in signals/slots, QVariants and qDebug() output.

It seems like the Q_ENUM is the better one as it is defined using Q_ENUMS, but I'm just guessing here.

What exactly are the differences, why are there two at all and which one should be prefered?


回答1:


The What's New in Qt 5.5 says:

Added Q_ENUM to replace Q_ENUMS, which allows to get a QMetaEnum at compile time using QMetaEnum::fromType. Such enums are now automatically registered as metatypes, and can be converted to strings within QVariant, or printed as string by qDebug().




回答2:


Since Qt 5.5 Q_ENUMS is deprecated, replaced with the better Q_ENUM.

There is an example showing its use in the Qt documentation:

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)

public:
    MyClass(QObject *parent = 0);
    ~MyClass();

    enum Priority { High, Low, VeryHigh, VeryLow };
    Q_ENUM(Priority)

    void setPriority(Priority priority)
    {
        m_priority = priority;
        emit priorityChanged(priority);
    }

    Priority priority() const
    { 
        return m_priority; 
    }

signals:
    void priorityChanged(Priority);

private:
    Priority m_priority;
};

For further details on the reasons behind the move from Q_ENUMS to Q_ENUM, read this blog entry



来源:https://stackoverflow.com/questions/46691227/what-is-the-difference-between-q-enum-and-q-enums

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!