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

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

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

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

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

5

Решение

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

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

5

Другие решения

Начиная с 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, читать эта запись в блоге

2

По вопросам рекламы [email protected]