Qml Custom Legend

This example shows you how to create your own custom legend.

This application shows you how to create your own custom legend instead of using the built-in legend of ChartView API.

The main view of the application shows a stacked area chart. This is how one of the stacked areas is created. See ChartViewStacked.qml and AnimatedAreaSeries.qml.

../_images/examples_qmlcustomlegend1.png

Running the Example

To run the example from Qt Creator , open the Welcome mode and select the example from Examples. For more information, visit Building and Running an Example.

Customizing Legends

AnimatedAreaSeries {
    id: municipalSeries
    name: "municipal"
    axisX: axisX
    axisY: axisY
    borderWidth: 0
    upperSeries: LineSeries {
        id: municipalUpper
        XYPoint { x: 2006; y: 33119 + 13443 }
        XYPoint { x: 2007; y: 37941 + 15311 }
        XYPoint { x: 2008; y: 40122 + 16552 }
        XYPoint { x: 2009; y: 38991 + 17904 }
        XYPoint { x: 2010; y: 34055 + 17599 }
        XYPoint { x: 2011; y: 34555 + 19002 }
        XYPoint { x: 2012; y: 38991 + 19177 }
    }
    lowerSeries: stateUpper
}

Hovering with mouse on top of the legend will highlight the hovered series. (see CustomLegend.qml).

../_images/examples_qmlcustomlegend2.png
Row {
    id: legendRow
    anchors.centerIn: parent
    spacing: 10

    Repeater {
        id: legendRepeater
        model: seriesCount
        delegate: legendDelegate
    }
}        Component {
    id: legendDelegate
    Rectangle {
        id: rect            ...
MouseArea {
    id: mouseArea
    anchors.fill: parent
    hoverEnabled: true
    onEntered: {
        rect.gradient = buttonGradientHovered;
        legend.entered(label.text);
    }
    onExited: {
        rect.gradient = buttonGradient;
        legend.exited(label.text);
        marker.opacity = 0.3;
        marker.height = 10;
    }
    onClicked: {
        legend.selected(label.text);
        marker.opacity = 1.0;
        marker.height = 12;
    }
}

You can also select one of the stacked areas for a closer look as a line series by a mouse click (see ChartViewHighlighted.qml).

../_images/examples_qmlcustomlegend3.png
ChartView {
    id: chartViewHighlighted
    title: ""
    property variant selectedSeries
    signal clicked
    legend.visible: false
    margins.top: 10
    margins.bottom: 0
    antialiasing: true

    LineSeries {
        id: lineSeries

        axisX: ValueAxis {
            min: 2006
            max: 2012
            labelFormat: "%.0f"
            tickCount: 7
        }
        axisY: ValueAxis {
            id: axisY
            titleText: "EUR"
            min: 0
            max: 40000
            labelFormat: "%.0f"
            tickCount: 5
        }
    }

Example project @ code.qt.io