要知道QVariant
是QString
还是整数,您必须使用QVariant::type()
或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;
}
如果使用其他方法来获得变异的类型,你会得到错误的答案。
例如:
// 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 !!!
现在,如果你想知道一个QVariant
可以转换为整数,你有一个答案的Qt中Documentation开头:
返回变种作为int,如果变体具有userType() QMetaType :: Int,QMetaType :: Bool,QMetaType :: QByteArray, QMetaType :: QChar,QMetaType :: Double,QMetaType :: LongLong, QMetaType :: QString,QMetaType: :UIN t或QMetaType :: ULongLong; 否则返回0.
这意味着有很多非整数变量可以转换为整数。要做到这一点,最安全的方法是使用QVariant::canConvert()
和QVariant::value()
:
QString aString = "42";
QVariant var = aString;
if (var.canConvert<int>())
{
auto anInteger = var.value<int>();
}
如果你能投它与'的QVariant :: toInt()'为int,比它的一个int,否则它是一个字符串或者anythings,因为你可以将任何QVariant转换为字符串。 – vahancho
尝试'int QVariant :: toInt(bool * ok = Q_NULLPTR)const' – eyllanesc
示例:'bool ok; int number = your_variant.toInt(&ok); if(ok){qDebug()<<“is number”}' – eyllanesc