enum 정의를 해서 사용하는데

그 정의가 늘어날 때마다 관련 코드를 넣는 것은 매우 고통스러운 일이다.

그리고 enum 실제 값과 해당하는 enum을 찾아서 처리해야하는 일들이 생긴다.

그 럴 때 사용하는 것이  QMetaEnum( 관련 문서 : http://doc.qt.io/qt-5/qmetaenum.html )이다.

예제.

class Currency : public QObject
{
Q_OBJECT
public:
enum class CurrencyType
{
    ABC = 1,
    CDE = 2,
    DEF = 3,
   _count,//이것이 있어야 함!!!
}
Q_ENUM(CurrencyType)

QObject를 상속 받아서 정의하고 _count를 넣은 다음에 Q_ENUM으로 정의해주어야 한다.
enum 값을 int로만 사용하면 static_cast<int>를 이용하면 충분하지만 enum의 이름을 사용할 필요가 있을 때 사용한다.

#1 QString to enum
QString 값을 enum value로 바꿔준다.
auto currencyMap = QMetaEnum::fromType<Currency::CurrencyType>(); //enum 클래스를 가지는 객체를 만든다.
QString currency = "ABC";
for (qint32 i = 0; i < currencyMap.keyCount(); i++)
{
    if (currencyMap.key(i) == currency)//key 값과  QString을 비교한다.
   {
                return Currency::CurrencyType(i); 
     }
}


#2 enum to QString

Currency::CurrencyType tempType = currency;

QString currencyString = QVariant::fromValue(currency).value<QString>();


by 무위자연 2018. 9. 11. 10:48
| 1 |