2015-10-19 136 views
4

带滑动枚举我能够访问Q_ENUMS性质和具体的,枚举的性格represenation,用下面的代码:QMetaEnum和强类型枚举

// in .h 
class EnumClass : public QObject 
{ 
    Q_OBJECT 
public: 
    enum MyEnumType { TypeA, TypeB }; 
    Q_ENUMS(MyEnumType) 
private: 
    MyEnumType m_type; 
}; 

// in .cpp 
m_type = TypeA; 
... 
const QMetaObject &mo = EnumClass::staticMetaObject; 
int index = mo.indexOfEnumerator("MyEnumType"); 
QMetaEnum metaEnum = mo.enumerator(index); 
QString enumString = metaEnum.valueToKey(m_type); // contains "TypeA" 

如果我想使用C++ 11的功能强类型枚举

enum class MyEnumType { TypeA, TypeB }; 

访问的元信息不工作了。我想,Qt并不认为它是一个枚举。

有没有解决方案来访问使用强类型枚举时枚举的字符表示?

+0

哪个版本的Qt您使用的是? – SingerOfTheFall

+0

@SingerOfTheFall:我们仍在使用qt4.8,但每当我们找到时间时就会​​切换到qt5。 – agentsmith

+0

我并不完全确定,但这可能是因为你的Qt版本。另外,检查http://stackoverflow.com/questions/6513736/qt-support-for-c0x-enum-class – SingerOfTheFall

回答

1

Q_ENUMS是过时的,并且Q_ENUM应改为使用,但下面的代码对我的作品与其中一方(QT 5.5,您的问题可能是由老的Qt版本引起的;也this question是相关的):

.H:

#include <QObject> 
class EnumClass : public QObject 
{ 
    Q_OBJECT 
public: 
    enum class MyEnumType { TypeA, TypeB }; 
    EnumClass(); 
    Q_ENUM(MyEnumType) 
private: 
    MyEnumType m_type; 
}; 

的.cpp:

#include <QDebug> 
#include <QMetaEnum> 
#include <QMetaObject> 
EnumClass::EnumClass() 
{ 
    m_type = MyEnumType::TypeA; 
    const QMetaObject &mo = EnumClass::staticMetaObject; 
    int index = mo.indexOfEnumerator("MyEnumType"); 
    QMetaEnum metaEnum = mo.enumerator(index); 
    // note the explicit cast: 
    QString enumString = metaEnum.valueToKey(static_cast<int>(m_type)); 
    qDebug() << enumString; 
} 

主:

int main() 
{ 
    EnumClass asd; 
    return 0; 
} 

输出:

“类型A”

+0

根据你的链接4.8只支持C++ 0x的一些特性,强类型枚举不在其中。我使用Q_ENUMS试过qt 5.2.1,因为Q_ENUM是在qt 5.5中引入的,并且它工作正常。谢谢! – agentsmith

+0

@agentsmith,欢迎你 – SingerOfTheFall