转自: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状态具体信息
}