【问题标题】:QVariantList.append() merges list instead of nestingQVariantList.append() 合并列表而不是嵌套
【发布时间】:2016-04-02 12:48:06
【问题描述】:

当我尝试将 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")
  )
)

【问题讨论】:

    标签: list qt5.5 qvariant


    【解决方案1】:

    自己找到了解决办法。

    这是由于 QList 的 append 过载:

    void QList::append(const QList & value)

    这是一个重载函数。

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

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

    QVariantList l;
    l.insert(l.size(), QVariant());
    

    【讨论】:

    • 您也可以使用没有特殊重载的push_back 别名QListl.push_back(other_list); 这依赖于来自 Qt 的“API 设计黑客”,但至少它不需要大小.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2016-11-24
    • 2023-02-22
    • 2017-12-18
    相关资源
    最近更新 更多