Je viens de trouver plusieurs exemples montrant l'utilisation de Q_ENUM
Et Q_ENUMS
Et en examinant la définition de Q_ENUM
M'a montré qu'il comprend Q_ENUMS
Et d'autres définitions.
Je ne sais pas lequel écrire lors de l'utilisation de l'énumération dans Q_PROPERTY
, Qml/QtQuick, dans les signaux/slots, QVariants et qDebug()
sortie.
Il semble que le Q_ENUM
Soit le meilleur tel qu'il est défini à l'aide de Q_ENUMS
, Mais je ne fais que deviner ici.
Quelles sont exactement les différences, pourquoi y en a-t-il deux et laquelle devrait être préférée?
Ajout de Q_ENUM pour remplacer Q_ENUMS, ce qui permet d'obtenir un QMetaEnum au moment de la compilation en utilisant QMetaEnum :: fromType. Ces énumérations sont désormais automatiquement enregistrées en tant que métatypes et peuvent être converties en chaînes dans QVariant ou imprimées en tant que chaîne par qDebug ().
Depuis Qt 5.5 Q_ENUMS
est obsolète, remplacé par le meilleur Q_ENUM
.
Il y a un exemple montrant son utilisation dans la documentation Qt :
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;
};
Pour plus de détails sur les raisons du passage de Q_ENUMS
à Q_ENUM
, lire cette entrée de blog