Erstellen von Polardiagrammen
Hinweis: Dies ist ein Teil des Beispiels für die Galerie "Diagramme mit Widgets ".
Es zeigt auch, wie man das Scrollen und Zoomen des Polardiagramms implementiert und wie Polardiagramme und kartesische Diagramme miteinander in Beziehung stehen.
Die Erstellung eines Polardiagramms erfolgt mit einer QPolarChart -Instanz anstelle einer QChart -Instanz.
auto chart = new QPolarChart;
Achsen werden ähnlich wie bei kartesischen Diagrammen erstellt, aber wenn dem Diagramm Achsen hinzugefügt werden, können Sie polare Ausrichtungen 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 ist logisch gesehen fast identisch mit dem Zoomen und Scrollen eines kartesischen Diagramms. Der Hauptunterschied besteht darin, dass beim Scrollen entlang der X-Achse (Winkelachse) der Winkel anstelle der Anzahl der Pixel 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; } }
Dieselben 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 Serien 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; }
© 2025 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.