QVariantList.append() 合并列表而不是嵌套

Vic*_*lio 4 list qvariant qt5.5

当我尝试将 a 嵌套QVariantList在 another 中时QVariantList,结果是两个列表的平面合并,而不是子列表。

演示代码:

QVariantList container;

QVariantList nested() << "bar" << "baz";

container.append("foo");  // or container << "foo";
container.append(nested); // or container << nested; 
Run Code Online (Sandbox Code Playgroud)

我得到了什么(缩进是我的):

QVariant(QVariantList,
  QVariant(QString, "foo"),
  QVariant(QString, "bar"),
  QVariant(QString, "baz"),
)
Run Code Online (Sandbox Code Playgroud)

我期望什么:

QVariant(QVariantList,
  QVariant(QString, "foo"),
  QVariant(QVariantList, 
    QVariant(QString, "bar"),
    QVariant(QString, "baz")
  )
)
Run Code Online (Sandbox Code Playgroud)

Vic*_*lio 7

自己找到了解决方案。

这是由于 QList 的append过载造成的:

void QList::append(const QList & value)

这是一个过载功能。

将值列表的项目附加到此列表。

解决方案是使用insert方法附加项目:

QVariantList l;
l.insert(l.size(), QVariant());
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用对`QList`没有特殊重载的[`push_back`](http://doc.qt.io/qt-5/qlist.html#push_back)别名:`l.push_back(other_list); ` 这依赖于 Qt 的“API 设计黑客”,但至少它不需要大小。 (6认同)