2014-04-03 4 views
5

enum 클래스, QVariants 및 QSettings 클래스에 문제가 있습니다. QVariant 내에 QPtings 인스턴스로 들어가기를 원하는 enum 클래스 값이 있습니다. 주장은 점프와 불평, 코드를 실행에이 시점에서QSettings에서 QVariant의 enum 클래스

enum class Foo 
{ 
    Bar1, Bar2 
} 
Q_ENUMS(Foo) 
Q_DECLARE_METATYPE(Foo) 

... 

Foo value = Bar2; 
QSettings settings; 
settings.setValue(QString("Foo"), QVariant::fromValue(value)); 

: 그래서, 내 코드는 실제로 다음과 같이 보입니다

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp 

인터넷 검색, I 클래스임을 발견 피팅이 누락되었습니다. < < 및 >> 연산자. 하지만 enum 클래스에는 옵션이 아닙니다. 심지어 사용하려고 시도했습니다.

qRegisterMetaType<Foo>("Foo"); 

그러나 도움이되지 않았습니다. 어쩌면 당신은 나를위한 다른 제안/해결책을 가지고있을 것입니다. 감사! 그것을 부호로 변환하는 것입니다 마스크 부호의 int입니다

답변

3

열거 형은, 문제가 될 것 같다, 아마 여기

Qt4 QSettings save enumeration value (for example Qt::CheckState)

솔루션과를 참조하십시오. 열거 형에 대한 static_cast-result가 유효한지 확인하려면 Foo_lowestFoo_highest 값을 열거 형 범위의 시작과 끝 부분에 추가 할 수 있습니다.

+0

맞습니다. QVariant의 열거 형에 문제가 있습니다. 내 원래 구현 QVariant에 실제 (서명되지 않은) 정수 값을 저장했다. 이제 스코프 된 열거 형을 시도했지만 QVariants에서이 문제점을 발견했습니다. 그러나 열거 형에서 가장 낮은 값/가장 높은 값의 트릭을 사용하여 원래 구현으로 되돌 렸습니다. 감사. – CppChris