好东西。
这是Qt源代码中产生这种行为的确切行:https ://github.com/qt/qtbase/blob/4e41babd0337473a1078d3a5f3367cc1fc5f2935/src/corelib/kernel/qvariant.cpp#L3564
QStringList 没有特殊情况,因此调用 QVariant::toString(),如果 QStringList 中没有或多个条目,则返回一个空字符串,如果只有一个,则返回第一个条目。
比较两个空字符串返回 0。将两个 QVariant 与一个条目进行比较会导致对两个字符串进行比较,并且将两个 QVariant 与多个条目进行比较会导致类型被比较,在所有情况下都产生返回值 1,从而导致<
总是回来false
,>
总是true
。
对我来说似乎是一个错误。
例子:
// 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 中的 QStringLists 的修复:https ://codereview.qt-project.org/#/c/165886/1