对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
}
不幸的是,以下似乎都不是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
方法来实现这些任务。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 为什么output_editor Concept不需要output_e迭代器标记
- TSP递归解的迭代形式
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 对QML XYSeries中的点进行迭代