頭文件中定義枚舉類型並設置Q_ENUMS
#ifndef TEST_H
#define TEST_H
#include <QObject>
#include <QMetaEnum>
class Test : public QObject
{
Q_OBJECT
Q_ENUMS(TestType) //[1]
public:
explicit Test(QObject *parent = nullptr);
enum TestType
{
TEST_ONE,
TEST_TWO,
TEST_THREE
};
signals:
public slots:
void DoTest(QString command);
};
#endif // TEST_H
源文件中的調用方式:
#include "test.h"
#include <QDebug>
Test::Test(QObject *parent) : QObject(parent)
{
}
void Test::DoTest(QString command)
{
//[2] QMetaObject是用來保存Qt元對象的元信息,當繼承QObject類並使用宏Q_OBJECT時,創建的類產生一個靜態QMetaObject實例staticMetaObject,這個實例會保存類名、信號名稱及索引、槽的名字及索引等等在對象操作時需要的基本信息
QMetaObject object = this->staticMetaObject;
QMetaEnum MeteEnum = object.enumerator(
object.indexOfEnumerator("Tests")); //[3]
switch (MeteEnum.keysToValue(command.toLatin1())) //[4]
{
case TEST_ONE:
qDebug() << "TEST 1";
break;
case TEST_TWO:
qDebug() << "TEST 2";
break;
case TEST_THREE:
qDebug() << "TEST 3";
break;
default:
qDebug() << "TEST NONE";
break;
}
}
測試程序調用類:
#include <QCoreApplication>
#include "test.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Test cTest;
cTest.DoTest(QString("sfe"));
cTest.DoTest(QString("TEST1"));
return a.exec();
}