我想使用ChartView和来自Python的数据在QML中创建LineSeries图表。我可以轻松地在Python中创建LineSeries并将数据追加到其中,但是我不知道如何将数据添加到QML ChartView。
我已经尝试过在Python中创建LineSeries并通过engine.rootContext()。setContextProperty()将其连接到QML,但是我没有看到如何将LineString添加到QML ChartView。我还可以将在QML中创建的LineSeries数据添加到Chartview,但是我需要能够在Python中定义和修改图表数据。似乎ChartView.createSeries()方法是添加数据的正确通道,但是我看不到如何将Python中定义的数据绑定到该方法。
在QML中创建示例LineSeries图表视图
ChartView {
id: routechart
title: "Routes View"
width: 300
Layout.rowSpan: 3
Layout.column: 1
Layout.alignment: Qt.AlignCenter
Layout.fillHeight: true
Layout.fillWidth: true
antialiasing: true
theme: ChartView.ChartThemeDark
// backgroundColor: "#242526"
LineSeries {
name: "TestSeries"
color: "#ffcc00"
// pointsVisible: true
XYPoint { x: 0; y: 0 }
XYPoint { x: 1.1; y: 2.1 }
XYPoint { x: 1.9; y: 3.3 }
XYPoint { x: 2.1; y: 2.1 }
XYPoint { x: 2.9; y: 4.9 }
XYPoint { x: 3.4; y: 3.0 }
XYPoint { x: 4.1; y: 3.3 }
}
}
在Python中创建QLineSeries
class LineModel(QtCharts.QLineSeries):
'''
Model to hold XY line series data for
plotting.
'''
def __init__(self):
super().__init__()
def addTestData(self):
x = [0, 2, 3, 7, 10]
y = [6, 4, 8, 4, 5]
for xp, yp in zip(x,y):
self.append(xp, yp)
使用QML引擎注册QLineSeries
# instantiate test LineModel
linemodel = LineModel()
# register the python type bindings to QML engine
engine.rootContext().setContextProperty('LineModel', linemodel)
类似于填充QML ListView的工作原理,一旦LineSeries注册到QML引擎,我希望能够将Python的LineSeries添加到QML ChartView。但是,我在Chartview中找不到执行此功能的方法,因此必须有一些替代方法来连接数据。