Creación de gráficos polares
Nota: Esto es parte del ejemplo de la Galería de Gráficos con Widgets.
También muestra cómo implementar el desplazamiento y el zoom del gráfico polar, así como demostrar visualmente cómo se relacionan los gráficos polares y los cartesianos.

La creación de un gráfico polar se realiza con una instancia de QPolarChart en lugar de una instancia de QChart.
auto chart = new QPolarChart;
Los ejes se crean de forma similar a los gráficos cartesianos, pero cuando se añaden ejes al gráfico, se pueden utilizar orientaciones polares en lugar de alineaciones.
auto angularAxis = new QValueAxis; angularAxis->setTickCount(9); // First and last ticks are co-located on 0/360 angle. angularAxis->setLabelFormat("%.1f"); angularAxis->setShadesVisible(true); angularAxis->setShadesBrush(QBrush(QColor(249, 249, 255))); chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular); auto radialAxis = new QValueAxis; radialAxis->setTickCount(9); radialAxis->setLabelFormat("%d"); chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
El zoom y desplazamiento de un gráfico polar es lógicamente casi idéntico al zoom y desplazamiento de un gráfico cartesiano. La principal diferencia es que cuando se desplaza a lo largo del eje X (eje angular), se utiliza el ángulo en lugar del número de píxeles. Otra diferencia es que no se puede hacer zoom a un rectángulo.
void PolarChartView::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Plus: chart()->zoomIn(); break; case Qt::Key_Minus: chart()->zoomOut(); break; case Qt::Key_Left: chart()->scroll(-1.0, 0); break; case Qt::Key_Right: chart()->scroll(1.0, 0); break; case Qt::Key_Up: chart()->scroll(0, 1.0); break; case Qt::Key_Down: chart()->scroll(0, -1.0); break; case Qt::Key_Space: switchChartType(); break; default: QGraphicsView::keyPressEvent(event); break; } }
Los mismos ejes y series pueden utilizarse tanto en gráficos cartesianos como polares, aunque no simultáneamente. Para cambiar de un tipo de gráfico a otro, primero hay que eliminar las series y los ejes del gráfico anterior y luego añadirlos al nuevo. Si desea conservar los rangos de los ejes, también deberá copiarlos.
void PolarChartView::switchChartType() { QChart *newChart; QChart *oldChart = chart(); if (oldChart->chartType() == QChart::ChartTypeCartesian) newChart = new QPolarChart; else newChart = new QChart; // Move series and axes from old chart to new one const QList<QAbstractSeries *> seriesList = oldChart->series(); const QList<QAbstractAxis *> axisList = oldChart->axes(); QList<QPair<qreal, qreal> > axisRanges; for (QAbstractAxis *axis : axisList) { auto valueAxis = static_cast<QValueAxis *>(axis); axisRanges.append(QPair<qreal, qreal>(valueAxis->min(), valueAxis->max())); } for (QAbstractSeries *series : seriesList) oldChart->removeSeries(series); for (QAbstractAxis *axis : axisList) { oldChart->removeAxis(axis); newChart->addAxis(axis, axis->alignment()); } for (QAbstractSeries *series : seriesList) { newChart->addSeries(series); for (QAbstractAxis *axis : axisList) series->attachAxis(axis); } int count = 0; for (QAbstractAxis *axis : axisList) { axis->setRange(axisRanges[count].first, axisRanges[count].second); count++; } newChart->setTitle(oldChart->title()); setChart(newChart); delete oldChart; }
© 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.