问题
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