迭代 QML XYSeries 中的点

Iterate over points in QML XYSeries

我正在尝试迭代 Qt 5.5 QtCharts LineSeries 类型中的点,它继承自 XYSeries

我尝试了一个简单的 for 循环,但我想不出一种方法来确定系列中的点数:

for (var i=0; i < my_line_series.contentItem.children.length; ++i) {
    // do something with the index
}

不幸的是,以下 none 似乎是 LineSeries 的成员:

或者,我可以尝试遍历系列,直到在给定索引处没有访问点——但是用于访问给定索引处的点的方法,at(),returns (0,0)如果索引无效,完全有可能我的LineSeries.

中有真实的(0,0)

...那么是否可以在纯 QML 中进行此迭代(请参阅编辑)?

编辑: 底层 C++ 类型 QLineSeries 提供了 count() 方法,因此可以将 LineSeries QML 类型传递给Q_INVOKABLE 方法采用 QAbstractSeries* 并以这种方式获得大小。不过,对于一个简单的问题来说,这似乎是一种荒谬的解决方法。

Qt 5.9+(也许是 5.8?)

现在 count property 包含此信息。

Qt 5.7

根据 Oxyd 的回答,count 属性 存在于版本 5.7 中,但未包含在文档中。

Qt 5.6 及更早版本

QML LineSeries 类型根本不提供对涉及该系列的任何重要任务所需的方法的访问。

解决方案是通过将 LineSeries QML 类型传递给采用 QAbstractSeries*.

Q_INVOKABLE 方法,在 C++ 中实现这些任务

Qt 5.7 可以实现。

有一个 "count" 属性(不是函数)允许您使用 QML / JS 中的 "at" 函数迭代 LineSeries 的点。

遗憾的是它没有记录在案,我胡乱猜测并且很幸运,但我想当您尝试使用 Qt 5.5 时 属性 不存在。

示例:

for(var i = 0; i < lineSeries.count; ++i)
    console.log(lineSeries.at(i));