如何在QML中基于QList存储的传感器数据绘制LineChart折线图
问题原因
- LineSeries 属于 Qt Charts 组件,本身不是 Qt Quick 的 Item 容器类控件,不支持嵌套 Repeater 来动态生成 XYPoint 子元素。你写的 Repeater 虽然可以正常触发初始化,但生成的 XYPoint 没有被绑定到 LineSeries 的数据序列中,因此图表不会渲染折线。
- 另外 X 轴的 max 建议做动态适配,避免数据长度更新后坐标轴范围不匹配。
修正方案
直接在 ChartView 初始化完成后,循环调用 LineSeries 的 append() 方法批量添加数据点即可,修正后代码如下:
import QtQuick 2.0 import QtCharts 2.3 Item { width:400 height:600 ChartView { id: chartView width:parent.width height:parent.height Component.onCompleted: { // 批量添加数据点 for(let i=0; i<device.AIN3data.length; i++){ lineSeries.append(i, device.AIN3data[i]) } // 更新X轴范围 axisX.max = device.AIN3data.length } ValueAxis { id: axisX min: 0 // 也可以直接绑定实现数据长度变化时自动更新轴范围 // max: device.AIN3data.length } ValueAxis { id: axisY min: 0 max: 1000 } LineSeries { id: lineSeries axisX: axisX axisY:axisY name: "AIN3" } } }
如果需要支持后续数据动态更新,可给 device.AIN3data 绑定数据变化信号,每次新增数据时调用 lineSeries.append() 追加新点即可。
内容的提问来源于stack exchange,提问作者Bl4ckmedia
相关产品推荐
相关产品推荐

