В чем разница между 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
, прочитайте эту запись в блоге