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