multiple Instanzen von QChartView updaten

Alles rund um die Programmierung mit Qt Quick und QML
Antworten
sidvic
Beiträge: 5
Registriert: 9. September 2010 13:09

multiple Instanzen von QChartView updaten

Beitrag von sidvic »

Hallo zusammen,

ich hab ein kleines Tool welches einfach 8 Charts anzeigen soll. (8xCPU Auslastung als LineSeries) Der Aufbau ist wie folgt:

zuerst das QChartView-Element in eigener qml-Datei:
Chart.qml

Code: Alles auswählen

import QtQuick 2.1
import QtCharts 2.1


ChartView {
	objectName: "chartView"+(index)
	id: chartview
	.....
	ValueAxis {
			id: xAxis
			.....
	}

	ValueAxis {
			id: yAxis
			......
	}
	LineSeries {
		id: lineSeries
		objectName: "LineSeries"+(index)
		axisX: xAxis
		axisY: yAxis
		XYPoint { x: index; y: 0.0 }
		XYPoint { x: 1.1; y: 3.2 }

	}
	Timer {
	......
    onTriggered: {
        manager.update_cpu_chart((index), parent.series(0));
    }
}
}
Der Aufruf in der main.qml sieht so aus:

Code: Alles auswählen

		Grid {
			 x: 0; y: 0
			 rows: 2; columns: 4; spacing: 0
			 Repeater { 
				model: 8
				id: chartRepeater
				Chart{}
			 }
		}
Als "backend" nehme ich statt C++ PySide2:
test.py

Code: Alles auswählen

    @Slot(int,QtCharts.QAbstractSeries)
    def update_cpu_chart(self, index, series):
        if series:
            line_series = QtCharts.QLineSeries(series)
            temp_list = self.core_temp.core_deques[index]
            l = []
            for i in range(0,len(temp_list )):
                l.append(QPointF(i,temp_list[i]))
            line_series.replace(l) 
Der Slot in Python wird auch aufgerufen und die Property objectName scheint auch zu stimmen. Leider wird das "replace" überhaupt nicht aufgerufen. Ich habe das Gefühl, dass ich auf einer falschen Instanz von QLineSeries werkel.

Ich bin leider was QML betrifft noch ein ziemlicher Neuling. Kann mir jemand auf die Sprünge helfen ob das Instanziieren der QChartsView soweit ok ist? wie würdet ihr das updaten der einzelnen Charts machen? Im Prinzip haben die alle die gleichen Achsen und sollen nur unterschiedliche Arrays darstellen.
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: multiple Instanzen von QChartView updaten

Beitrag von veeman »

Code: Alles auswählen

        if series:
            line_series = QtCharts.QLineSeries(series)
            ....
            line_series.replace(l)
Das sieht mehr sehr suspekt aus.
Du erstellst ein neue QLineSerias-Instanz (mit dem parent als Ursprünglichen "line") füllst diese mit Daten und verwendest nicht mehr weiter.

Ein series.replace(l) sollte reichen.
sidvic
Beiträge: 5
Registriert: 9. September 2010 13:09

Re: multiple Instanzen von QChartView updaten

Beitrag von sidvic »

Es lag tatsächlich an der neuen Instanz, eigentlich wollte ich nur casten...
Zusätzlich musste ich die Slot-Annotation noch anpassen (QAbstractSeries -> QObject, etwas unschön) da die replace() Methode der Basisklasse QAbstractSeries nicht passend war.

Vielen Dank für deine Antwort. :)
Antworten