我正在尝试迭代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()
方法,因此可以将LineSeries
QML类型传递给采用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++中通过将LineSeries
QML类型传递给采用QAbstractSeries*
的Q_INVOKABLE
方法来实现这些任务。