Utilisation des marqueurs de légende
Remarque : cet exemple fait partie de la galerie « Charts with Widgets ».
Dans cet exemple, nous créons une application qui utilise le signal « clicked » de QLegendMarker pour afficher ou masquer la série correspondante dans un graphique. Le bouton « Connect Marker » relie le signal « clicked » de tous les marqueurs d’une légende au slot « handleMarkerClicked ».

Notre application comporte des boutons permettant d’ajouter ou de supprimer une série dans un graphique, ainsi qu’un bouton permettant de connecter ou de déconnecter le signal « clicked » des marqueurs de la légende à notre gestionnaire. Sur l’image ci-dessus, nous avons connecté les marqueurs et cliqué sur l’un d’entre eux.
// 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);
}Ici, nous connectons les marqueurs de la légende à notre gestionnaire. Pour éviter de connecter plusieurs fois le même marqueur, nous le déconnectons d’abord.
const auto markers = m_chart->legend()->markers();
for (QLegendMarker *marker : markers) {
QObject::disconnect(marker, &QLegendMarker::clicked,
this, &LegendMarkersWidget::handleMarkerClicked);
}Ici, nous déconnectons tous les marqueurs de notre gestionnaire.
auto marker = qobject_cast<QLegendMarker *>(sender());
Q_ASSERT(marker);Dans notre gestionnaire, nous convertissons d’abord l’émetteur de l’événement en QLegendMarker.
switch (marker->type())Ensuite, nous vérifions le type du marqueur. Cette étape est nécessaire si nous souhaitons accéder aux méthodes détaillées du marqueur et le convertir vers le type approprié. Si nous n'avons besoin que du pointeur vers QAbstractSeries, la conversion n'est pas nécessaire. Dans le cas d’une série circulaire ou à barres, nous pouvons avoir besoin du pointeur vers un QPieSlice ou un QBarSet associé.
// 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);Nous souhaitons activer ou désactiver la visibilité de la série lorsque l’on clique sur le marqueur. Pour ce faire, nous récupérons le pointeur vers la série associée à partir du marqueur et modifions sa visibilité. Étant donné que le marqueur de légende suit par défaut la visibilité de la série, nous remettons également le marqueur en état visible. Si nous ne le faisons pas, le marqueur sera invisible dans la légende et nous ne pourrons plus cliquer dessus.
// 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);Au lieu de rendre le marqueur invisible lorsque la série est masquée, nous atténuons la couleur du marqueur. Ici, nous procédons en modifiant la couleur du `labelBrush`.
© 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.