Uso de marcadores de leyenda
Nota: Esto es parte del ejemplo de la Galería de Gráficos con Widgets.
En este ejemplo creamos una aplicación que utiliza la señal QLegendMarker clicked para mostrar/ocultar la serie correspondiente en un gráfico. El botón conectar marcador conecta una señal de clic de todos los marcadores de una leyenda a la ranura handleMarkerClicked.

Nuestra aplicación tiene botones para añadir o eliminar una serie en un gráfico y un botón para conectar o desconectar la señal de clic de los marcadores de leyenda a nuestro manejador. En la imagen anterior hemos conectado los marcadores y hemos hecho clic en uno de ellos.
// 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); }
Aquí conectamos los marcadores de la leyenda a nuestro manejador. Para evitar conectar el mismo marcador más de una vez, primero lo desconectamos.
const auto markers = m_chart->legend()->markers(); for (QLegendMarker *marker : markers) { QObject::disconnect(marker, &QLegendMarker::clicked, this, &LegendMarkersWidget::handleMarkerClicked); }
Aquí desconectamos todos los marcadores de nuestro manejador.
auto marker = qobject_cast<QLegendMarker *>(sender()); Q_ASSERT(marker);
En nuestro manejador primero asignamos el remitente del evento a QLegendMarker.
switch (marker->type())
Después comprobamos el tipo del marcador. Esto es necesario si queremos acceder a los métodos detallados del marcador y asignarle el tipo correcto. Si todo lo que necesitamos es el puntero a QAbstractSeries, el casting no es necesario. En el caso de una serie de tarta o barra, podemos necesitar el puntero a un QPieSlice o QBarSet relacionado.
// 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);
Queremos cambiar la visibilidad de la serie, cuando se hace clic en el marcador. Para ello, obtenemos el puntero a una serie relacionada del marcador y cambiamos su visibilidad. Como el marcador de la leyenda sigue por defecto la visibilidad de la serie, también volvemos a poner el marcado en visible. Si no lo hacemos así, el marcador será invisible en la leyenda y ya no podremos hacer clic sobre él.
// 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);
En lugar de hacer invisible el marcador cuando la serie está oculta, atenuamos el color del marcador. Aquí lo hacemos modificando el color del laberBrush.
© 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.