2017-07-17 55 views
0

我會做一個在modbus上寫數據的方法。 如果是String或Int,我需要該QVariant返回。確定如果QVariant是String或Int

我的變種: 的QVariant dataToWrite

存在返回dataToWrite內容是字符串或整數的方法? 在C#我怎麼這個解決方案:How do I identify if a string is a number?

我看到這個鏈接的文檔:http://doc.qt.io/qt-5/qvariant.html 但是在QT我沒有找到解決方案。

由於

+0

如果你能投它與'的QVariant :: toInt()'爲int,比它的一個int,否則它是一個字符串或者anythings,因爲你可以將任何QVariant轉換爲字符串。 – vahancho

+2

嘗試'int QVariant :: toInt(bool * ok = Q_NULLPTR)const' – eyllanesc

+0

示例:'bool ok; int number = your_variant.toInt(&ok); if(ok){qDebug()<<「is number」}' – eyllanesc

回答

1

QVariant::canConvert()是返回真或假,該變體是否可以轉換到特定類型的模板的方法。從它的幫助:

QVariant v = 42; 

v.canConvert<int>();    // returns true 
v.canConvert<QString>();   // returns true 

所以它不是沒有檢查施工參數正好是一個int或字符串但看起來足以滿足您的目的。

1

要知道QVariantQString還是整數,您必須使用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>(); 
} 
相關問題