Мне нужно изменить QPolarChart
, чтобы создать Satellite SkyPlot .
Для этого мне нужно повернуть радиальную ось (ось возвышения) так, чтобы 90 помещалось в начало координат, а 0 - на внешнее кольцо.
В списке членов для QValueAxis
я нашел метод setReverse
, который, кажется, делает то, что мне нужно.
Однако выполнение setReverse(true)
на оси возвышения не переворачивает ось, как я ожидал.
Как мне тогда повернуть ось?
Это минимальный код, необходимый для запуска этого примера:
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QPolarChart>
#include <QtCharts/QValueAxis>
#include <QScatterSeries>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QtCharts::QPolarChart *chart = new QtCharts::QPolarChart();
chart->legend()->hide();
QScatterSeries *series = new QScatterSeries();
for (int i = 0; i < 360; i += 10) {
series->append(i, i);
}
chart->addSeries(series);
QValueAxis *azimuthAxis = new QValueAxis();
azimuthAxis->setRange(0, 360);
azimuthAxis->setTickCount(9);
azimuthAxis->setLabelFormat("%d");
azimuthAxis->setLabelsVisible(true);
chart->addAxis(azimuthAxis, QPolarChart::PolarOrientationAngular);
QValueAxis *elevationAxis = new QValueAxis();
elevationAxis->setRange(0, 90);
elevationAxis->setTickCount(7);
elevationAxis->setLabelFormat("%d");
elevationAxis->setLabelsVisible(true);
elevationAxis->setReverse(true); // <-- REVERSE THE AXIS
chart->addAxis(elevationAxis, QPolarChart::PolarOrientationRadial);
QtCharts::QChartView *chartView = new QtCharts::QChartView();
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(800, 600);
window.show();
return app.exec();
}
UPDATE:
После прочтения Комментарий Дэмиена :
Вы можете проверить с помощью isReverse
, была ли учтена команда setReverse
Я сделал тест, поставив qDebug() << elevationAxis->isReverse();
непосредственно перед и сразу после elevationAxis->setReverse(true);
, и он выводит false
и true
соответственно.
qDebug() << elevationAxis->isReverse(); // <-- Prints out "false"
elevationAxis->setReverse(true); // <-- REVERSE THE AXIS
qDebug() << elevationAxis->isReverse(); // <-- Prints out "true"
Таким образом, свойство reverse
действительно изменено. Однако это изменение не отражается визуально на оси.
Документация для свойства reverse
гласит:
Это свойство определяет, используется ли обратная ось.
По умолчанию установлено значение false
.
Обратная ось поддерживается линией, сплайном и разбросом,
а также ряд областей с декартовой диаграммой . Все оси одинаковы
ориентация, прикрепленная к той же серии, должна быть обратной
перевернуто или поведение не определено.
Полярная диаграмма, конечно, НЕ является декартовой, так что это может быть корнем проблемы.