我会做一个在 modbus 上写入数据的方法。 如果是 String 或 Int,我需要 QVariant 返回。
我的变量: QVariant dataToWrite
是否存在返回dataToWrite 内容为String 或Integer 的方法? 在 c# 中,我做了这个解决方案:How do I identify if a string is a number?
我在这个链接上看到了文档: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 中找到答案 Documentation :
Returns the variant as an int if the variant has userType() QMetaType::Int, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, or QMetaType::ULongLong; otherwise returns 0.
这意味着有许多非整数变体可以转换为整数。最安全的方法是使用 QVariant::canConvert()
和 QVariant::value()
:
QString aString = "42";
QVariant var = aString;
if (var.canConvert<int>())
{
auto anInteger = var.value<int>();
}
关于c++ - 确定 QVariant 是 String 还是 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140049/