Q_ENUM和Q_ENUMS有什么区别

What is the difference between Q_ENUM and Q_ENUMS

本文关键字:什么 区别 ENUM ENUMS      更新时间:2023-10-16

我刚刚找到了多个示例,显示了Q_ENUMQ_ENUMS的用法,并查看了Q_ENUM的定义,发现它包括Q_ENUMS和其他定义。

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

似乎Q_ENUM是更好的,因为它是使用 Q_ENUMS 定义的,但我只是在这里猜测。

究竟有什么区别,为什么有两个,应该首选哪一个?

Qt 5.5中的新增功能说:

添加了Q_ENUM来替换Q_ENUMS,这允许在编译时使用QMetaEnum::fromType获取QMetaEnum。这些枚举现在自动注册为元类型,并且可以在 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背后的原因的更多详细信息,请阅读此博客文章