Q_ENUM和Q_ENUMS之间有什么区别

fee*_*0de 9 c++ qt5 qmetatype

我只是找到了多个示例说明的用法Q_ENUM,并Q_ENUMS与展望定义的Q_ENUM给我看,它包括Q_ENUMS和其他定义.

Q_PROPERTY在信号/插槽,QVariants和qDebug()输出中使用枚举Qml/QtQuick时,我不确定要写哪一个.

似乎Q_ENUM使用它是更好的一个Q_ENUMS,但我只是在这里猜测.

究竟有什么区别,为什么有两个差异,哪一个应该优先考虑?

And*_*rii 7

新增Qt中5.5表示:

添加了Q_ENUM来替换Q_ENUMS,它允许在编译时使用QMetaEnum :: fromType获取QMetaEnum.这些枚举现在自动注册为元类型,可以在QVariant中转换为字符串,或者通过qDebug()打印为字符串.


Ste*_*mer 5

由于Q_ENUMS不建议使用Qt 5.5 ,因此最好使用代替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;
};
Run Code Online (Sandbox Code Playgroud)

有关从背后此举的原因的详细信息Q_ENUMSQ_ENUM阅读这篇博客