首页 » QT » QT枚举类型与字符串类型相互转换

QT枚举类型与字符串类型相互转换

作者: 低调的术木 分类: QT 发布时间: 2018-01-25 09:43 ė浏览 129 次 6没有评论

1、使用Q_ENUM宏注册(注意:1、必须继承QObject, 2、在QT5.5版本引入)

 

#include <QObject>
class Cenum: public QObject
{
    Q_OBJECT
public:
    Cenum() {}
    
    enum Priority
    { 
        High, 
        Low,
        VeryHigh, 
        VeryLow 
    };
    Q_ENUM(Priority)
};

2、使用QMetaEnum对象转换

qDebug()<<Cenum::High<<"\t"<<Cenum::Low;                     //!qDebug可以直接打印出枚举类值的字符串名称
QMetaEnum metaEnum = QMetaEnum::fromType<Cenum::Priority>();
qDebug()<<  metaEnum.valueToKey(Cenum::VeryHigh);            //! enum转string
qDebug()<<  metaEnum.keysToValue("VeryHigh");                //!string转enum

 

在QT中将枚举类型注册(QT_Q_ENUM或QT_Q_FLAG)后,就可以利用QT的元对象进行枚举类型与字符串类型转换了。

代码示例:

#include <QtCore/QMetaEnum>

int main() {
    QMetaEnum metaEnum = QMetaEnum::fromType<Qt::Alignment>();

    //字符串转枚举值
    Qt::Alignment alignment = (Qt::Alignment)metaEnum.keyToValue("Qt::AlignLeft");
    alignment = (Qt::Alignment)metaEnum.keysToValue("Qt::AlignLeft | Qt::AlignVCenter");

    //枚举值转字符串
    const char* s = metaEnum.valueToKey(Qt::AlignCenter);
    return 0;
}

本文出自 蓝天笔记,转载时请注明出处及相应链接。

本文永久链接: http://ubluesky.com/archives/867

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部