Verwendung von Legendenmarkierungen
Hinweis: Dies ist Teil des Beispiels „Charts with Widgets Gallery “.
In diesem Beispiel erstellen wir eine Anwendung, die das Signal „clicked“ von QLegendMarker verwendet, um die entsprechende Reihe in einem Diagramm ein- bzw. auszublenden. Die Schaltfläche „Marker verbinden“ verbindet das Signal „clicked“ aller Marker in einer Legende mit dem Slot „handleMarkerClicked“.

Unsere Anwendung verfügt über Schaltflächen zum Hinzufügen oder Entfernen einer Reihe in einem Diagramm sowie über eine Schaltfläche, um das „clicked“-Signal der Legendenmarker mit unserem Handler zu verbinden oder die Verbindung zu trennen. In der Abbildung oben haben wir die Marker verbunden und auf einen davon 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 mehr als einmal verbunden wird, trennen wir die Verbindung zunächst.
const auto markers = m_chart->legend()->markers();
for (QLegendMarker *marker : markers) {
QObject::disconnect(marker, &QLegendMarker::clicked,
this, &LegendMarkersWidget::handleMarkerClicked);
}Hier trennen wir alle Marker von unserem Handler.
auto marker = qobject_cast<QLegendMarker *>(sender());
Q_ASSERT(marker);In unserem Handler wandeln wir zunächst den Absender des Ereignisses in einen `QLegendMarker` um.
switch (marker->type())Anschließend prüfen wir den Typ des Markers. Dies ist erforderlich, wenn wir auf die detaillierten Methoden des Markers zugreifen und ihn in den richtigen Typ umwandeln wollen. Wenn wir lediglich den Zeiger auf `QAbstractSeries` benötigen, ist die Typumwandlung nicht notwendig. Bei einer Kreis- oder Balkenreihe benötigen wir möglicherweise den Zeiger auf ein zugehöriges `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 möchten die Sichtbarkeit der Reihe umschalten, wenn auf den Marker geklickt wird. Dazu holen wir den Zeiger auf eine zugehörige Reihe aus dem Marker und schalten deren Sichtbarkeit um. Da der Legendenmarker standardmäßig der Sichtbarkeit der Reihe folgt, setzen wir den Marker ebenfalls wieder auf „sichtbar“. Tun wir dies nicht, ist die Markierung in der Legende unsichtbar und wir können nicht mehr darauf 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 den Marker unsichtbar zu machen, wenn die Reihe ausgeblendet ist, dämpfen wir die Farbe des Markers. Hier erreichen wir dies, indem wir die Farbe des „labelBrush“ anpassen.
© 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.