2016-04-15 11 views
5

Der QVariant Typ des Qt Framework bietet Vergleichsoperatoren <, <=, >, >=, aber sie arbeiten unerwartet auf unterzeichnet/Mismatch unsigned Integer-Argumente:QVariant/ohne Vorzeichen Vergleiche

QVariant(-1) < QVariant(0u) yields false 
QVariant(0u) > QVariant(-1) yields false 

Weiß jemand, ob dies ein Fehler ist, oder ist das beabsichtigt? Geben diese Operatoren bei einer Unsigned/Unsigned Mismatch immer False zurück?

Btw, ich bin mit Qt 5.6

Antwort

3

QVariant(-1) < QVariant(0u) rufen Einbau-Komparatoren von int und unsigned int. Grundsätzlich, (int(-1) < uint(0)) == false (und here wird es warum erklärt).

Wenn Sie ein anderes Verhalten wollen, konvertieren Werte vor dem Vergleich explizit mit toInt() oder ähnlichen Methoden: QVariant(-1).toInt() < QVariant(0u).toInt() == true