2017-04-06 2 views
0

는 내가 가진 : QMetaEnum에서QMetaType에서 구조체 멤버의 이름을 가져 오는 방법은 무엇입니까?

struct myStruct { 
    int m_valueA; 
    float m_valueA; 
    bool m_valueA; 
}; 
Q_DECLARE_METATYPE(myStruct) 

.... 

struct myStructXY { 
    .... 
}; 
Q_DECLARE_METATYPE(myStructXY) 

내가 얻을 수있는 열거 이름 :

Q_ENUM(myEnum) 
QMetaEnum enumTypes QMetaEnum::fromType<myEnum>(); 

QMap<qint32, QString> labelsMap; 
for(int i = 0; i < enumTypes.keyCount(); i++) 
{ 
    QString enumName = QString(enumTypes.key(i)); 
    labelsMap.insert(enumTypes.value(i), enumName); 
} 

내가 열거 형의 previuos 경우와 유사한 메타 타입에서 myStruct 회원의 이름과 유형을 수집 dynamicaly 싶습니다. 처럼 :

QMetaObject structType; 
QStringList list = getStructMemberNames(structType); 

합니까 Qt는이 작업을 수행 할 수있는 옵션이? 나는 QMetaType을 검색했으나이를 수행하는 데 더 많은 힘이 필요합니다.

답변

2

나는 이것을 Qt에서 할 생각이 없다고 생각합니다.

가장 가까운 것은 신호, 슬롯 및 속성을 노출하는 QMetaObject입니다. 속성은 멤버 변수를 노출하는 것처럼 보일 수 있지만 정확히 묻지는 않습니다.

또한 QMetaEnum은 moc에서 처리하는 QObject 클래스에서 Q_ENUM을 사용한 경우에만 작동합니다. 그래서 구조체와 비슷한 것을 만들기 위해서는 QObjects 내부의 구조체와 함께 작동하고 Q_STRUCT로 선언해야하지만 현재로서는 존재하지 않습니다.

1

QMetaType에서 구조체 멤버의 이름을 얻는 방법은 무엇입니까?

moc은 이러한 메타 데이터 생성을 지원하지 않으므로 Qt를 처음 사용하지 마십시오. 그게 다야. 원하는 경우 moc 패치를 적용 할 수 있지만 사용하지 않으면 즉시 사용할 수 있습니다. AST from clang을 가져 와서 일부 메타 데이터 레코드를 생성하여 코드에 추가하면 더 많은 성공을 거둘 수있을 것입니다.

관련 문제