Как автоматически изменить масштаб оси в QtCharts?

я использую QtCharts.

Мне нужно, чтобы обе оси были изменены после добавления значений. Добавленные мной значения не находятся в диапазоне от 0 до 1, а также не от 1970 года.

Ось QtChart неправильно масштабирована

Код конструктора моего диалога выглядит так:

m_series = new QLineSeries;
m_series->setName(name);

auto chart = new QChart;
chart->legend()->setVisible(false);
chart->addSeries(m_series);

m_axisX = new QDateTimeAxis;
//m_axisX->setFormat("HH:mm:ss");
m_axisX->setTitleText(tr("Zeitpunkt"));
chart->addAxis(m_axisX, Qt::AlignBottom);

m_series->attachAxis(m_axisX);

auto axisY = new QValueAxis;
axisY->setTitleText(unit);
chart->addAxis(axisY, Qt::AlignLeft);

m_series->attachAxis(axisY);

auto chartView = new QChartView(chart, this);
chartView->setRenderHint(QPainter::Antialiasing);

Мое MainWindow испускает сигналы, связывающие новые значения. Несколько открытых диалоговых окон графика связаны с этим сигналом.

void ChartDialog::liveUpdate(const RealTimeMeasureRegisters &registers)
{
auto result = ((&registers)->*m_methodPtr)();

m_series->append(registers.timestamp(), result);
}

Есть ли какой-нибудь простой способ сказать QDateTimeAxis (в моем случае m_axisX) автоматически подстраиваться под новые значения?

QDateTimeAxis :: SetRange () выглядит не очень хорошо, потому что мне нужно установить минимум и максимум.

7

Решение

Я не знаю, как настроить автоматически, но вы можете посмотреть на этот пример, который динамически добавляет точки на график:
http://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html

Хотя в этом примере диапазон был ограничен при добавлении точек, поэтому для дальнейшего продвижения потребовалось бы перенастроить диапазон, когда следующая точка выходит за его пределы.

Как вы говорите, setRange требует минимума и максимума, но вы можете обновить его в своем liveUpdate.

1

Другие решения

О первом параметре в m_series-> append (). Лучше используйте «qint64 QDateTime :: toMSecsSincPoch ()» ….
лайк:

...
m_series->append(QDateTime::currentDateTime().toMSecsSincPoch(), result);
0

По вопросам рекламы [email protected]