QT-枚举与字符串互相转换

转自:https://cloud.tencent.com/developer/article/1463790

步骤:
项目文件添加 QT+=core;
创建类 Car继承于 QObject并使用 Q_OBJECT宏;
类内添加枚举 Color;
使用 Q_ENUM宏将 Color枚举注册到元对象系统中;
使用 QMetaEnum::fromType获取枚举的 QMetaEnum对象;
使用 valueToKey或 keyToValue进行转换操作。

returncode.h

#ifndef RETURNCODE_H
#define RETURNCODE_H

#include <QObject>
#include <QMetaEnum>
#include <QDebug>

class returnCode : public QObject
{
    
    
    Q_OBJECT
public:
    explicit returnCode(QObject *parent = nullptr);

    enum nAdsState
    {
    
    
        ADSSTATE_INVALID			= 0,
        ADSSTATE_IDLE				= 1,
        ADSSTATE_RESET				= 2,
        ADSSTATE_INIT				= 3,
        ADSSTATE_START				= 4,
        ADSSTATE_RUN				= 5,
        ADSSTATE_STOP				= 6,
        ADSSTATE_SAVECFG			= 7,
        ADSSTATE_LOADCFG			= 8,
        ADSSTATE_POWERFAILURE       = 9,
        ADSSTATE_POWERGOOD			= 10,
        ADSSTATE_ERROR				= 11,
        ADSSTATE_SHUTDOWN			= 12,
        ADSSTATE_SUSPEND			= 13,
        ADSSTATE_RESUME				= 14,
        ADSSTATE_CONFIG				= 15,
        ADSSTATE_RECONFIG			= 16,
        ADSSTATE_STOPPING			= 17,
        ADSSTATE_MAXSTATES
    };
    Q_ENUM(nAdsState)

signals:

public slots:
    void checkCode(short code);
};

#endif // RETURNCODE_H

returncode.cpp

void returnCode::checkCode(short code)
{
    
    
    QMetaEnum metaColor = QMetaEnum::fromType<returnCode::nAdsState>();
    qDebug()<<metaColor.valueToKey(code);
}

mainwindow.cpp

connect(this,SIGNAL(sendCode(short)),rCode,SLOT(checkCode(short)));

//向PLC读取PLC的状态信息
nErr = AdsSyncReadStateReq(pAddr, &nAdsState, &nDeviceState);
if (nErr)
{
    
    
    qDebug()<<"Error: AdsSyncReadStateReq: " << nErr << '\n';
}
else
{
    
    
    qDebug()<<"PLCState: " << nAdsState << '\n'; // 输出PLC状态信息代码
    emit sendCode(static_cast<short>(nAdsState));// 输出PLC状态具体信息
}

猜你喜欢

转载自blog.csdn.net/woshigaowei5146/article/details/105203303