QVariantList.append() 合并列表而不是嵌套
QVariantList.append() merges list instead of nesting
当我尝试将一个 QVariantList
嵌套在另一个 QVariantList
中时,结果是两个列表的平面合并,而不是子列表。
演示代码:
QVariantList container;
QVariantList nested() << "bar" << "baz";
container.append("foo"); // or container << "foo";
container.append(nested); // or container << nested;
我得到的(缩进是我的):
QVariant(QVariantList,
QVariant(QString, "foo"),
QVariant(QString, "bar"),
QVariant(QString, "baz"),
)
我的期望:
QVariant(QVariantList,
QVariant(QString, "foo"),
QVariant(QVariantList,
QVariant(QString, "bar"),
QVariant(QString, "baz")
)
)
自己找到解决方案。
这是由于 QList 的 append
过载:
void QList::append(const QList & value)
This is an overloaded function.
Appends the items of the value list to this list.
解决方案是使用 insert
方法追加项目:
QVariantList l;
l.insert(l.size(), QVariant());
当我尝试将一个 QVariantList
嵌套在另一个 QVariantList
中时,结果是两个列表的平面合并,而不是子列表。
演示代码:
QVariantList container;
QVariantList nested() << "bar" << "baz";
container.append("foo"); // or container << "foo";
container.append(nested); // or container << nested;
我得到的(缩进是我的):
QVariant(QVariantList,
QVariant(QString, "foo"),
QVariant(QString, "bar"),
QVariant(QString, "baz"),
)
我的期望:
QVariant(QVariantList,
QVariant(QString, "foo"),
QVariant(QVariantList,
QVariant(QString, "bar"),
QVariant(QString, "baz")
)
)
自己找到解决方案。
这是由于 QList 的 append
过载:
void QList::append(const QList & value)
This is an overloaded function.
Appends the items of the value list to this list.
解决方案是使用 insert
方法追加项目:
QVariantList l;
l.insert(l.size(), QVariant());