Polar-Diagramme erstellen
Hinweis: Dies ist Teil des Beispiels „Diagramme mit Widgets-Galerie “.
Es zeigt außerdem, wie das Scrollen und Zoomen des Polardiagramms implementiert wird, und veranschaulicht, in welcher Beziehung Polardiagramme und kartesische Diagramme zueinander stehen.

Zum Erstellen eines Polardiagramms wird eine QPolarChart-Instanz anstelle einer QChart-Instanz verwendet.
auto chart = new QPolarChart;Achsen werden ähnlich wie bei kartesischen Diagrammen erstellt, doch beim Hinzufügen von Achsen zum Diagramm können Sie Polarkoordinaten anstelle von Ausrichtungen verwenden.
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);Das Zoomen und Scrollen eines Polardiagramms erfolgt logisch gesehen fast identisch wie das Zoomen und Scrollen eines kartesischen Diagramms. Der Hauptunterschied besteht darin, dass beim Scrollen entlang der X-Achse (Winkelachse) der Winkel anstelle der Pixelanzahl verwendet wird. Ein weiterer Unterschied ist, dass das Zoomen auf ein Rechteck nicht möglich ist.
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;
}
}Die gleichen Achsen und Reihen können sowohl in kartesischen als auch in polaren Diagrammen verwendet werden, allerdings nicht gleichzeitig. Um zwischen den Diagrammtypen zu wechseln, müssen Sie zunächst die Reihen und Achsen aus dem alten Diagramm entfernen und sie dann dem neuen Diagramm hinzufügen. Wenn Sie die Achsenbereiche beibehalten möchten, müssen diese ebenfalls kopiert werden.
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.