2014-06-17 5 views
6

QVariant가 longunsigned long에 대한 기능을 제공하지 않는다는 것을 깨달았습니다. int, unsigned int, long longunsigned long long으로 전환 할 수 있습니다.부호없는 long int를 QVariant로 변환하는 방법

현재 데스크톱 아키텍처에서 longint은 동일한 것으로 나타 났지만 이론적 관점은 아닙니다.

longQVariant에 저장하려면 먼저 값을 long long으로 변환해야합니다. 나는 이것을 극복 할 수있는 다른 방법이 있는지 알고 싶습니다.

두 번째로, 나는 더 나은/더 간단한 방법을 알고 싶어합니다. 나는. 간단한 코드를 사용하고 불필요한 공간이나 지시 사항을 사용하지 않아야합니다.

답변

1

longQVariant에 저장하려면 먼저 값을 long long으로 변환해야합니다.

QVariant store (unsigned long int input) { 
    unsigned long long data = (unsigned long long) input; 
    QVariant qvariant(data); 
    return qvariant; 
} 

unsigned long int load (const QVariant& qvariant) { 
    bool ok; 
    unsigned long int data = (unsigned long) qvariant.toULongLong(&ok); 
    if (ok) 
     return data; 
    else 
     return NAN; 
} 
+0

입니까 ?? 여기는 답변자가 제안되는 섹션이기 때문에 –

+0

글쎄, 나는이 대답을 가지고있다. 그래서 이것을 극복 할 수있는 다른 방법이 있다면 나는 알고 싶다. 나는 이것이 세련미라고 말한다. 예를 들어. 데이터를 QString으로 변환하면이 문제를 극복 할 수 있습니다. QString은 변환 할 수있는 기능이 있지만 더 복잡 할 것입니다. 감사합니다 – Tony

+0

그래서 내 질문에 속한 모든 것을 넣어 주시기 바랍니다 필요에 따라 수정을 만들기 위해 질문을 수정;) –

1

이 문제는 디자인 QVariant 클래스와 관련이 없습니다. 하지만 긴 타입의 문제입니다.

long 타입 변경이지만 int (4) 또는 long long (8)은 모든 LLP64/IL32P64 LP64/I32LP64에서 동일하지만, wikipedia 메모입니다.

Intel Developer zone 말 :

제안 : 그것은 정수 타입은 모든 인텔 플랫폼에서 크기가 동일 할 당신에게 중요하다면, 다음 "INT"또는 "긴 하나가"오래 "교체를 고려 긴". "int"정수형의 크기는 4 바이트이며, 위의 운영 체제와 아키텍처 조합의 경우 모두 의 경우 "long long"정수 유형의 크기는 8 바이트입니다. 이것은 또 다른 질문이나 실제 질문의 정제

행운
/모하메드

+0

필자가 아는 한 'long int'는 대개 ​​4 바이트이지만 'int'크기는 플랫폼에 따라 다를 수 있습니다 (4 바이트 미만으로 저장할 수 있음). 그러나 현재의 데스크탑 플랫폼은 4 바이트 (최소 워드 크기; 32b)를 사용하여 int를 구현합니다. 따라서 표준 정의에서 더 많은 정수를 허용하는 'long'을 사용하면 더 행복해집니다. 0 부호 INT 4294967295 : 부호없는 긴 // EN : 65535 0 내가 첫 번째 발언은 내가 특히 [여기] 포스트에 넣어 링크 (HTTPS에서 잘못된 봐 생각하면 모하메드 – Tony

+0

감사드립니다. 위키 피 디아.org/wiki/64-bit_computing # 64-bit_data_models). – requinham

+0

죄송하지만, 귀하의 요지는 보이지 않습니다. 링크는'long int'와'int' 둘 다 다른 크기를 보여줍니다. 64 비트 길이의 아키텍처에서는 대부분의 유형에 변수를 나타 내기 위해 전체 단어를 사용하는 것이 합리적입니다. 그러나, 세계 길이가 짧은 아키텍처는 더 작은 크기를 사용할 수 있습니다. 크기는 궁극적으로 플랫폼에 따라 다릅니다. 내가 아는 한 그렇게 말했다. 플랫폼은 2 바이트 길이의 'int'를 구현할 수 있으며 여전히 표준 C/C++ (0-65535)입니다. 모든 아키텍처가 32b 또는 64b는 아닙니다. – Tony

관련 문제