当我更改Qt版本时,此程序提供不同的输出:
#include <QDebug>
#include <QVariant>
int main()
{
QVariant value("");
qDebug() << value;
bool whatValue = QVariant::fromValue(nullptr) == value;
qDebug() << "*** value Check ***" << whatValue;
}为什么我会得到不同的结果?
发布于 2019-12-11 08:20:12
比较QVariant的类型可能很棘手,特别是如果它们的元类型不同,因为它们之间的转换总是尝试的。在后一种情况下,比较返回true,因为Qt 5.12支持将QMetaType::Nullptr转换为QString,参见这里,第511-513行。
由于QT5.9中缺少这种情况,所以转换失败,因此比较返回false。
如果您对这种行为不满意,可以在自己的函数中强制执行元类型检查,例如:
bool compareVariants(const QVariant & x, const QVariant & y)
{
if(x.type() == y.type())
{
return (x == y);
}
return false;
}即只对相同的元类型返回QVariant::operator==,否则返回false。
https://stackoverflow.com/questions/59260960
复制相似问题