对QML XYSeries中的点进行迭代

Iterate over points in QML XYSeries

本文关键字:迭代 QML XYSeries      更新时间:2023-10-16

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

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

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

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

  • contentItem
  • children
  • length
  • count
  • size

或者,我可以尝试在序列上迭代,直到在给定的索引上没有可访问的点——但如果索引无效,用于访问给定索引上的点的方法at()将返回(0,0),并且完全有可能在我的LineSeries中存在真正的(0,0)点。

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

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

Qt 5.7有可能。

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

遗憾的是,它没有记录在案,我做了一个疯狂的猜测,很幸运,但我想当你尝试Qt 5.5时,该房产并不存在。

示例:

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

Qt 5.9+(可能5.8?)

现在有一个包含此信息的count属性。

问题5.7

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

问题5.6及更早版本

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

解决方案是在C++中通过将LineSeriesQML类型传递给采用QAbstractSeries*Q_INVOKABLE方法来实现这些任务。