我将编写一个在 modbus 上写入数据的方法。
我需要让 QVariant 返回它是字符串还是整数。
我的变量: QVariant dataToWrite
是否存在一种方法可以返回 dataToWrite 的内容是字符串或整数?在 C# 中,我采用了以下解决方案:如何判断一个字符串是否为数字?
我在这个链接中看到了文档:http://doc.qt.io/qt-5/qvariant.html,但是在 Qt 中我没有找到解决方案。
谢谢
我将编写一个在 modbus 上写入数据的方法。
我需要让 QVariant 返回它是字符串还是整数。
我的变量: QVariant dataToWrite
是否存在一种方法可以返回 dataToWrite 的内容是字符串或整数?在 C# 中,我采用了以下解决方案:如何判断一个字符串是否为数字?
我在这个链接中看到了文档:http://doc.qt.io/qt-5/qvariant.html,但是在 Qt 中我没有找到解决方案。
谢谢
要知道一个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(var); // Returns true, but var.type() returns QMetaType::QString !!!
现在如果您想知道一个 QVariant
是否可以转换为整数,您可以在 Qt 的 文档中找到答案:
如果变体的 userType() 为 QMetaType::Int、QMetaType::Bool、QMetaType::QByteArray、QMetaType::QChar、QMetaType::Double、QMetaType::LongLong、QMetaType::QString、QMetaType::UInt 或 QMetaType::ULongLong,则返回 int 类型的变量;否则返回 0。
这意味着有很多非整数变量可以转换为整数。最安全的方法是使用 QVariant::canConvert()
和 QVariant::value()
:
QString aString = "42";
QVariant var = aString;
if (var.canConvert<int>())
{
auto anInteger = var.value<int>();
}
canConvert()
只告诉你 QVariant
是否知道如何在两种类型之间进行转换。它并不告诉你转换是否会成功。在你的情况下,QVariant
知道如何将 QString
转换成 int
:它会调用 String::toInt()
,但问题在于 QString::toInt()
会返回 0
,因为 71.62465753424658
不是一个 int
。 - Benjamin TQVariant::canConvert()
是一个模板方法,它返回 true 或 false,判断变量能否转换为特定类型。根据其帮助文档:
QVariant v = 42;
v.canConvert<int>(); // returns true
v.canConvert<QString>(); // returns true
因此,它并未检查构造参数是否确切地为int
或字符串,但对于您的目的来说似乎足够了。
QVariant::toInt()
将其转换为int类型,那么它就是一个int类型,否则它就是一个字符串或其他任何类型,因为你总是可以将任何QVariant转换为字符串。 - vahanchoint QVariant::toInt(bool *ok = Q_NULLPTR) const
。 - eyllanesc