要知道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