2015-10-19 105 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