Legendenmarkierungen verwenden

Hinweis: Dies ist Teil des Beispiels Charts with Widgets Gallery.

In diesem Beispiel wird eine Anwendung erstellt, die das Signal QLegendMarker clicked verwendet, um die entsprechende Serie in einem Diagramm anzuzeigen/auszublenden. Die Schaltfläche connect marker verbindet das Signal clicked von allen Markern in einer Legende mit dem Slot handleMarkerClicked.

Unsere Anwendung verfügt über Schaltflächen zum Hinzufügen oder Entfernen einer Serie in einem Diagramm und eine Schaltfläche zum Verbinden oder Trennen des Signals "Legendenmarker angeklickt" mit unserem Handler. In der Abbildung oben haben wir die Marker verbunden und auf einen von ihnen geklickt.

    // Connect all markers to handler
    const auto markers = m_chart->legend()->markers();
    for (QLegendMarker *marker : markers) {
        // Disconnect possible existing connection to avoid multiple connections
        QObject::disconnect(marker, &QLegendMarker::clicked,
                            this, &LegendMarkersWidget::handleMarkerClicked);
        QObject::connect(marker, &QLegendMarker::clicked,
                         this, &LegendMarkersWidget::handleMarkerClicked);
    }

Hier verbinden wir die Marker in der Legende mit unserem Handler. Um zu vermeiden, dass derselbe Marker mehrmals verbunden wird, trennen wir ihn zunächst ab.

    const auto markers = m_chart->legend()->markers();
    for (QLegendMarker *marker : markers) {
        QObject::disconnect(marker, &QLegendMarker::clicked,
                            this, &LegendMarkersWidget::handleMarkerClicked);
    }

Hier trennen wir alle Markierungen von unserem Handler.

    auto marker = qobject_cast<QLegendMarker *>(sender());
    Q_ASSERT(marker);

In unserem Handler übergeben wir zunächst den Absender des Ereignisses an QLegendMarker.

    switch (marker->type())

Dann prüfen wir den Typ der Markierung. Dies ist erforderlich, wenn wir auf die detaillierten Methoden des Markers zugreifen und ihn auf den richtigen Typ umwandeln wollen. Wenn wir nur den Zeiger auf QAbstractSeries benötigen, ist das Casting nicht notwendig. Im Falle einer Torten- oder Balkenserie benötigen wir möglicherweise den Zeiger auf eine zugehörige QPieSlice oder QBarSet.

        // Toggle visibility of series
        marker->series()->setVisible(!marker->series()->isVisible());

        // Turn legend marker back to visible, since hiding series also hides the marker
        // and we don't want it to happen now.
        marker->setVisible(true);

Wir wollen die Sichtbarkeit der Serie umschalten, wenn die Markierung angeklickt wird. Dazu holen wir uns den Zeiger auf eine verwandte Reihe von der Markierung und schalten deren Sichtbarkeit um. Da die Legendenmarkierung standardmäßig der Sichtbarkeit der Reihe folgt, setzen wir auch die Markierung zurück auf sichtbar. Wenn wir dies nicht tun, wird die Markierung in der Legende unsichtbar und wir können nicht mehr auf sie klicken.

        // Dim the marker, if series is not visible
        qreal alpha = 1.0;

        if (!marker->series()->isVisible())
            alpha = 0.5;

        QColor color;
        QBrush brush = marker->labelBrush();
        color = brush.color();
        color.setAlphaF(alpha);
        brush.setColor(color);
        marker->setLabelBrush(brush);

        brush = marker->brush();
        color = brush.color();
        color.setAlphaF(alpha);
        brush.setColor(color);
        marker->setBrush(brush);

        QPen pen = marker->pen();
        color = pen.color();
        color.setAlphaF(alpha);
        pen.setColor(color);
        marker->setPen(pen);

Anstatt die Markierung unsichtbar zu machen, wenn die Reihe ausgeblendet ist, dimmen wir die Farbe der Markierung. Hier tun wir das, indem wir die Farbe des laberBrush ändern.

© 2025 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.