我刚发现多个示例显示Q_ENUM
和Q_ENUMS
的使用情况,并查看Q_ENUM
的定义,告诉我它包含Q_ENUMS
和其他定义。
在信号/插槽,QVariants和Q_PROPERTY
输出中使用qDebug()
,Qml / QtQuick中的枚举时,我不确定要写哪一个。
似乎Q_ENUM
是更好的,因为它是使用Q_ENUMS
定义的,但我只是在这里猜测。
究竟有什么不同,为什么有两个,哪一个应该优先?
答案 0 :(得分:5)
添加了Q_ENUM来替换Q_ENUMS,它允许在编译时使用QMetaEnum :: fromType获取QMetaEnum。这些枚举现在自动注册为元类型,可以在QVariant中转换为字符串,或者通过qDebug()打印为字符串。
答案 1 :(得分:2)
由于不推荐使用Qt 5.5 Q_ENUMS
,请将其替换为更好的Q_ENUM
。
有一个示例显示了它在Qt documentation中的用法:
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
背后原因的详细信息,请阅读this blog entry