Я только что нашел несколько примеров, показывающих использование Q_ENUM
а также Q_ENUMS
и глядя на определение Q_ENUM
показал мне, что включает Q_ENUMS
и другие определения.
Я не уверен, что написать при использовании enum в Q_PROPERTY
, Qml / QtQuick, в сигналах / слотах, QVariants и qDebug()
выход.
Кажется, что Q_ENUM
лучше, как это определено с помощью Q_ENUMS
но я просто догадываюсь здесь.
Какие именно различия, почему их вообще два, и какой из них следует отдать предпочтение?
Что нового в 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
, читать эта запись в блоге