web-dev-qa-db-fra.com

Quelle est la différence entre Q_ENUM et Q_ENUMS

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?

12
feedc0de

Quoi de neuf dans Qt 5.5 dit:

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 ().

7
Andrii

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

5
Steve Lorimer