首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVariants与QStringList比较

QVariants与QStringList比较
EN

Stack Overflow用户
提问于 2016-07-20 21:56:34
回答 1查看 263关注 0票数 1

当比较QVariant和内部的QStringList时,我有一些奇怪的观察。

代码:

代码语言:javascript
复制
QStringList l1, l2;

l1 << "";
l2 << "33" << "434";

const bool le = l1 < l2;
const bool ge = l1 > l2;
const bool eq = l1 == l2;

QVariant v1(l1), v2(l2);

const bool vle = v1 < v2;
const bool vge = v1 > v2;
const bool veq = v1 == v2;

当我修改l1时,我的比较结果(legeeq)有期望值。但它根本不影响变体的结果。我总是认为vge ==是真的,vleveq总是假的。

医生说应该管用。我哪里错了还是Qt错误?我用的是Qt5.7。

编辑

我已经为这个问题填写了一个bug报告:https://bugreports.qt.io/browse/QTBUG-54893

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 23:29:09

干得好。

下面是生成这种行为的Qt源代码中的确切行:https://github.com/qt/qtbase/blob/4e41babd0337473a1078d3a5f3367cc1fc5f2935/src/corelib/kernel/qvariant.cpp#L3564

QStringList没有特例,因此调用QVariant::toString(),如果没有,则返回一个空字符串,或者在QStringList中有多个条目时返回一个空字符串,如果只有一个条目,则返回第一个条目。

比较两个空字符串返回0。将两个QVariant和一个条目进行比较,结果是对两个字符串进行比较,将两个QVariant与多个条目进行比较,从而使类型进行比较,在所有情况下,返回值为1,这导致<总是返回false,而>总是返回true

在我看来是个虫子。

示例:

代码语言:javascript
复制
// expected behaviour when both have a single entry
QStringList l, m;
l << "0";
m << "1";
QVariant less(l);
QVariant more(m);
less < more; // true
less > more; // false

QStringList l, m;
l << "1";
m << "0";
QVariant less(l);
QVariant more(m);
less < more; // false
less > more; // true

// ... or both have no entry
QStringList l, m;
QVariant less(l);
QVariant more(m);
less < more; // false
more < less; // false
more == less; // true

// otherwise, things get weird
QStringList l, m;
l << "0" << "1";
m << "2" << "3";
QVariant less(l);
QVariant more(m);
less < more; // false
more < less; // false
less > more; // true
more > less; // true
less == more; // false

QStringList l, m;
m << "2" << "3";
QVariant less(l);
QVariant more(m);
less < more; // false
more < less; // false
less > more; // true
more > less; // true
less == more; // false

等。

编辑:在QVariants:https://codereview.qt-project.org/#/c/165886/1中显式地比较QVariants:https://codereview.qt-project.org/#/c/165886/1中的修复

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

https://stackoverflow.com/questions/38491520

复制
相关文章

相似问题

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