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狀態具體信息
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章