В чем разница между Q_ENUM и Q_ENUMS

Я только что нашел несколько примеров, показывающих использование Q_ENUM а также Q_ENUMS и глядя на определение Q_ENUM показал мне, что включает Q_ENUMS и другие определения.

Я не уверен, что написать при использовании enum в Q_PROPERTY, Qml/QtQuick, в сигналах / слотах, QVariants и qDebug() выход.

Кажется, что Q_ENUM лучше, как это определено с помощью Q_ENUMSно я просто догадываюсь здесь.

Какие именно различия, почему их вообще два, и какой из них следует отдать предпочтение?

2 ответа

Решение

Что нового в Qt 5.5 говорит:

Добавлен Q_ENUM для замены Q_ENUMS, который позволяет получить QMetaEnum во время компиляции, используя QMetaEnum::fromType. Такие перечисления теперь автоматически регистрируются как метатипы и могут быть преобразованы в строки в QVariant или напечатаны как строка с помощью qDebug().

Начиная с Qt 5.5 Q_ENUMS устарела, заменена на лучшую Q_ENUM,

Есть пример, показывающий его использование в документации 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;
};

Для более подробной информации о причинах перехода от Q_ENUMS в Q_ENUM, прочитайте эту запись в блоге

Другие вопросы по тегам