首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较nullptr QVariant与空QString在Qt5.9和Qt5.12中的不同输出

比较nullptr QVariant与空QString在Qt5.9和Qt5.12中的不同输出
EN

Stack Overflow用户
提问于 2019-12-10 05:46:29
回答 1查看 197关注 0票数 2

当我更改Qt版本时,此程序提供不同的输出:

代码语言:javascript
复制
#include <QDebug>
#include <QVariant>

int main()
{
    QVariant value("");
    qDebug() << value;
    bool whatValue = QVariant::fromValue(nullptr) == value;
    qDebug() << "*** value Check ***" << whatValue;
}
  • 在使用C++11的QT5.9中,输出是: QVariant(QString,"") *值检查*假
  • 在使用C++17的QT5.12中,输出是: QVariant(QString,"") *值检查*真

为什么我会得到不同的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 08:20:12

比较QVariant的类型可能很棘手,特别是如果它们的元类型不同,因为它们之间的转换总是尝试的。在后一种情况下,比较返回true,因为Qt 5.12支持将QMetaType::Nullptr转换为QString,参见这里,第511-513行。

由于QT5.9中缺少这种情况,所以转换失败,因此比较返回false。

如果您对这种行为不满意,可以在自己的函数中强制执行元类型检查,例如:

代码语言:javascript
复制
bool compareVariants(const QVariant & x, const QVariant & y)
{
    if(x.type() == y.type())
    {
        return (x == y);
    }
    return false;
}

即只对相同的元类型返回QVariant::operator==,否则返回false

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59260960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档