Auf dieser Seite

Diagramme mit der QML-Galerie

Veranschaulicht die Verwendung der verschiedenen Diagrammtypen mithilfe von QML.

Screenshot, der die Anzahl der Spieler im NHL-All-Star-Team aus drei verschiedenen Ländern als Flächendiagramm darstellt, wobei die grüne Fläche Schweden, die blaue Fläche Russland und die orange Fläche Finnland entspricht. Auf der linken Seite befinden sich verschiedene Optionen, um das Diagramm in andere Diagrammtypen umzuwandeln.

Ausführen des Beispiels

Sie können das Beispiel wie folgt ausführen:

Es handelt sich um eine „ Qt Quick “-Anwendung. Die Dateien für die einzelnen Diagrammtypen befinden sich im Verzeichnis „qml“ des Beispielordners und werden von der Datei „main.qml“, die sich ebenfalls in diesem Beispielverzeichnis befindet, in eine „ ListView “ geladen und angeordnet.

Diese Dokumentation konzentriert sich nicht auf das Layout der obersten Ebene oder das Laden, sondern vielmehr auf die Verwendung der Qt Charts -QML-API.

Einbinden von Abhängigkeiten

Alle .qml-Dateien beginnen mit:

import QtQuick
import QtCharts

Erstellen von Diagrammen mit QML

Die Erstellung jedes Diagrammtyps beginnt mit der Erstellung einer `ChartView`.

Um ein Kreisdiagramm zu erstellen, verwenden wir die „PieSeries“-API zusammen mit einigen „PieSlices“:

Screenshot, der die fünf führenden Automarken in Finnland in Form eines Kreisdiagramms darstellt

ChartView {
    id: chart
    title: "Top-5 car brand shares in Finland"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    property variant othersSlice: 0

    PieSeries {
        id: pieSeries
        PieSlice { label: "Volkswagen"; value: 13.5 }
        PieSlice { label: "Toyota"; value: 10.9 }
        PieSlice { label: "Ford"; value: 8.6 }
        PieSlice { label: "Skoda"; value: 8.2 }
        PieSlice { label: "Volvo"; value: 6.8 }
    }

    Component.onCompleted: {
        // You can also manipulate slices dynamically, like append a slice or set a slice exploded
        othersSlice = pieSeries.append("Others", 52.0);
        pieSeries.find("Volkswagen").exploded = true;
    }
}

Sie können ein Diagramm mit einer Linienreihe erstellen:

Screenshot mit einem Beispiel für ein Liniendiagramm

ChartView {
    title: "Line Chart"
    anchors.fill: parent
    antialiasing: true

    LineSeries {
        name: "Line"
        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 }
    }
}

Und eine Spline-Reihe:

Screenshot mit einem Beispiel für ein Spline-Diagramm

ChartView {
    title: "Spline Chart"
    anchors.fill: parent
    antialiasing: true

    SplineSeries {
        name: "Spline"
        XYPoint { x: 0; y: 0.0 }
        XYPoint { x: 1.1; y: 3.2 }
        XYPoint { x: 1.9; y: 2.4 }
        XYPoint { x: 2.1; y: 2.1 }
        XYPoint { x: 2.9; y: 2.6 }
        XYPoint { x: 3.4; y: 2.3 }
        XYPoint { x: 4.1; y: 3.1 }
    }
}

Sie können ein Diagramm erstellen, das die Auswahl der NHL-All-Star-Spieler veranschaulicht, indem Sie drei Flächenreihen verwenden:

Screenshot, der die Anzahl der Spieler im NHL-All-Star-Team aus drei verschiedenen Ländern in Form eines Flächendiagramms darstellt, wobei die grüne Fläche für Schweden, die blaue für Russland und die orangefarbene für Finnland steht

ChartView {
    title: "NHL All-Star Team Players"
    anchors.fill: parent
    antialiasing: true

    // Define x-axis to be used with the series instead of default one
    ValueAxis {
        id: valueAxis
        min: 2000
        max: 2011
        tickCount: 12
        labelFormat: "%.0f"
    }

    AreaSeries {
        name: "Russian"
        axisX: valueAxis
        upperSeries: LineSeries {
            XYPoint { x: 2000; y: 1 }
            XYPoint { x: 2001; y: 1 }
            XYPoint { x: 2002; y: 1 }
            XYPoint { x: 2003; y: 1 }
            XYPoint { x: 2004; y: 1 }
            XYPoint { x: 2005; y: 0 }
            XYPoint { x: 2006; y: 1 }
            XYPoint { x: 2007; y: 1 }
            XYPoint { x: 2008; y: 4 }
            XYPoint { x: 2009; y: 3 }
            XYPoint { x: 2010; y: 2 }
            XYPoint { x: 2011; y: 1 }
        }
    }
    ...

Dann noch ein paar Streudiagramm-Reihen:

Screenshot, der zwei in einem Diagramm übereinander angeordnete Streudiagrammreihen zeigt, wobei „scatter1“ blaue Punkte und „scatter2“ grüne Punkte aufweist

ChartView {
    title: "Scatter Chart"
    anchors.fill: parent
    antialiasing: true

    ScatterSeries {
        id: scatter1
        name: "Scatter A"
        XYPoint { x: 1.5; y: 1.5 }
        XYPoint { x: 1.5; y: 1.6 }
        XYPoint { x: 1.57; y: 1.55 }
        XYPoint { x: 1.8; y: 1.8 }
        XYPoint { x: 1.9; y: 1.6 }
        XYPoint { x: 2.1; y: 1.3 }
        XYPoint { x: 2.5; y: 2.1 }
    }

    ScatterSeries {
        name: "Scatter B"
        XYPoint { x: 2.0; y: 2.0 }
        XYPoint { x: 2.0; y: 2.1 }
        XYPoint { x: 2.07; y: 2.05 }
        XYPoint { x: 2.2; y: 2.9 }
        XYPoint { x: 2.4; y: 2.7 }
        XYPoint { x: 2.67; y: 2.65 }
    }
}
    ...

Und einige verschiedene Balkenreihen:

Screenshot, der die Beiträge von drei verschiedenen Personen als Balkendiagramm zeigt, wobei Bob den blauen Balken, Susan den grünen und James den orangefarbenen darstellt

ChartView {
    title: "Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    BarSeries {
        id: mySeries
        axisX: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Screenshot, der die Beiträge derselben Personen als gestapelte Balkendiagrammreihe zeigt

ChartView {
    title: "Stacked Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    StackedBarSeries {
        axisX: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Screenshot, der die Beiträge derselben Personen zeigt, jedoch als prozentuale Balkendiagrammreihe

ChartView {
    title: "Percent Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    PercentBarSeries {
        axisX: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Screenshot, der die Beiträge derselben Personen als horizontale Balkendiagrammreihe zeigt

ChartView {
    title: "Horizontal Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    HorizontalBarSeries {
        axisY: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Screenshot, der die Beiträge derselben Personen zeigt, jedoch als horizontale gestapelte Balkendiagrammreihe

ChartView {
    title: "Horizontal Stacked Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    HorizontalStackedBarSeries {
        axisY: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Screenshot, der die Beiträge derselben Personen zeigt, jedoch als horizontale Prozentbalkenreihe

ChartView {
    title: "Horizontal Percent Bar Chart"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    HorizontalPercentBarSeries {
        axisY: BarCategoryAxis { categories: ["2007", "2008", "2009", "2010", "2011", "2012" ] }
        BarSet { label: "Bob"; values: [2, 2, 3, 4, 5, 6] }
        BarSet { label: "Susan"; values: [5, 1, 2, 4, 1, 7] }
        BarSet { label: "James"; values: [3, 5, 8, 13, 5, 8] }
    }
}

Hier wird gezeigt, wie man ein Ringdiagramm mit zwei Kreissequenzen erstellt:

Screenshot, der die Produktionskosten in Form eines Ringdiagramms darstellt, wobei die Hauptkategorien mit Unterthemen versehen sind

ChartView {
    id: chart
    title: "Production Costs"
    anchors.fill: parent
    legend.visible: false
    antialiasing: true

    PieSeries {
        id: pieOuter
        size: 0.96
        holeSize: 0.7
        PieSlice { id: slice; label: "Alpha"; value: 19511; color: "#99CA53" }
        PieSlice { label: "Epsilon"; value: 11105; color: "#209FDF" }
        PieSlice { label: "Psi"; value: 9352; color: "#F6A625" }
    }

    PieSeries {
        size: 0.7
        id: pieInner
        holeSize: 0.25

        PieSlice { label: "Materials"; value: 10334; color: "#B9DB8A" }
        PieSlice { label: "Employee"; value: 3066; color: "#DCEDC4" }
        PieSlice { label: "Logistics"; value: 6111; color: "#F3F9EB" }

        PieSlice { label: "Materials"; value: 7371; color: "#63BCE9" }
        PieSlice { label: "Employee"; value: 2443; color: "#A6D9F2" }
        PieSlice { label: "Logistics"; value: 1291; color: "#E9F5FC" }

        PieSlice { label: "Materials"; value: 4022; color: "#F9C36C" }
        PieSlice { label: "Employee"; value: 3998; color: "#FCE1B6" }
        PieSlice { label: "Logistics"; value: 1332; color: "#FEF5E7" }
    }

    Component.onCompleted: {
        // Set the common slice properties dynamically for convenience
        for (var i = 0; i < pieOuter.count; i++) {
            pieOuter.at(i).labelPosition = PieSlice.LabelOutside;
            pieOuter.at(i).labelVisible = true;
            pieOuter.at(i).borderWidth = 3;
        }
        for (var i = 0; i < pieInner.count; i++) {
            pieInner.at(i).labelPosition = PieSlice.LabelInsideNormal;
            pieInner.at(i).labelVisible = true;
            pieInner.at(i).borderWidth = 2;
        }
    }
}

Außerdem wird das Anti-Aliasing mit der QML-Eigenschaft in „ Qt Quick 2“ eingestellt.

Weitere Diagramme

Unter den folgenden Links finden Sie eine Schritt-für-Schritt-Anleitung zu den übrigen Diagrammen in dieser Beispiel-App.

Customizing Chart Views with QML

Zeigt Ihnen, wie Sie verschiedene visuelle Eigenschaften einer `ChartView` und einer Reihe anpassen können.

Customizing Legends

Zeigt Ihnen, wie Sie eine eigene benutzerdefinierte Legende erstellen.

Using Axes with QML

Veranschaulicht die Verwendung von Achsen in Ihrer QML-Anwendung.

Using List Models as Data Sources in QML

Implementiert ein F1-Legenden-Diagramm, um Listenmodelle als Datenquellen zu veranschaulichen.

Using Polar Charts with QML

Zeigt, wie Sie verschiedene Polardiagramme in Ihrer QML-Anwendung erstellen können.

Beispielprojekt auf code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.