Pour savoir si un QVariant
est un QString
ou un entier, vous devez utiliser QVariant::type()
ou QVariant::userType()
.
bool isInteger(const QVariant &variant)
{
switch (variant.userType())
{
case QMetaType::Int:
case QMetaType::UInt:
case QMetaType::LongLong:
case QMetaType::ULongLong:
return true;
}
return false;
}
bool isString(const QVariant &variant)
{
return variant.userType() == QMetaType::QString;
}
Si vous utilisez d'autres méthodes pour obtenir le type de la variante, vous obtiendrez des réponses erronées.
Par exemple:
// This function does not work!
bool isInteger(const QVariant &variant)
{
bool ok = false;
variant.toInt(&ok);
return ok;
}
QString aString = "42";
QVariant var = aString;
isInteger(aString); // Returns true, but var.type() returns QMetaType::QString !!!
Maintenant, si vous voulez savoir si un QVariant
peut être converti en un entier, vous avez le début d'une réponse dans Qt Documentation:
Renvoie la variante comme un int si la variante a userType() QMetaType :: Int, QMetaType :: Bool, QMetaType :: QByteArray, QMetaType :: QChar, QMetaType :: Double, QMetaType :: LongLong, QMetaType :: QString, QMetaType: : UIn t, ou QMetaType :: ULongLong; sinon renvoie 0.
Cela signifie qu'il existe de nombreuses variantes non entières pouvant être converties en nombre entier. La meilleure façon de le faire est d'utiliser QVariant::canConvert()
et QVariant::value()
:
QString aString = "42";
QVariant var = aString;
if (var.canConvert<int>())
{
auto anInteger = var.value<int>();
}
Si vous pouvez jeter int avec 'QVariant :: toInt()', que c'est un entier, sinon il est une chaîne ou anythings d'autre, parce que vous pouvez convertir n'importe quel QVariant en chaîne de toute façon. – vahancho
Essayez avec 'int QVariant :: toInt (bool * ok = Q_NULLPTR) const' – eyllanesc
Exemple:' bool ok; int nombre = your_variant.toInt (&ok); si (ok) {qDebug() << "est le numéro"} ' – eyllanesc