我将做一个在modbus上写数据的方法.如果是String或Int,我需要返回QVariant.
我的变量: QVariant dataToWrite
存在一个返回dataToWrite内容的方法是String还是Integer?在c#中我做了这个解决方案:如何识别字符串是否为数字?
我在这个链接上看到了文档:http://doc.qt.io/qt-5/qvariant.html 但在qt中我找不到解决方案.
谢谢
要知道a QVariant是a 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用其他方法来获取变体的类型,您将得到错误的答案.
例如:
// 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 !!!
Run Code Online (Sandbox Code Playgroud)
现在,如果你想知道a是否QVariant可以转换为整数,你可以在Qt 文档中找到答案的开头:
如果变体具有userType()QMetaType :: Int,QMetaType :: Bool,QMetaType :: QByteArray,QMetaType :: QChar,QMetaType :: Double,QMetaType :: LongLong,QMetaType :: QString,QMetaType,则将变量返回为int: :UInt,或QMetaType :: ULongLong; 否则返回0.
这意味着有许多非整数变体可以转换为整数.最安全的方法是使用QVariant::canConvert()和QVariant::value():
QString aString = "42";
QVariant var = aString;
if (var.canConvert<int>())
{
auto anInteger = var.value<int>();
}
Run Code Online (Sandbox Code Playgroud)
QVariant::canConvert()是一个模板化方法,返回 true 或 false,判断变体是否可以转换为特定类型。从它的帮助:
QVariant v = 42;
v.canConvert<int>(); // returns true
v.canConvert<QString>(); // returns true
Run Code Online (Sandbox Code Playgroud)
因此,它不会检查构造参数是否完全是一个int或一个字符串,但看起来足以满足您的目的。
| 归档时间: |
|
| 查看次数: |
4661 次 |
| 最近记录: |