我正在使用QtCharts.
我需要在追加值后重新调整两个轴.我附加的值不在0和1之间,也不是从1970年开始.
我的对话框的构造函数代码如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
我的MainWindow发出包含新值的信号.多个打开的图表对话框连接到该信号.
void ChartDialog::liveUpdate(const RealTimeMeasureRegisters ®isters)
{
auto result = ((®isters)->*m_methodPtr)();
m_series->append(registers.timestamp(), result);
}
Run Code Online (Sandbox Code Playgroud)
是否有一些简单的方法告诉QDateTimeAxis(在我的情况下m_axisX)自动调整到新值?
QDateTimeAxis :: setRange()看起来不太好,因为我需要设置最小值和最大值.
我不知道自动调整的方法,但你可以看看这个例子,它动态地向图表添加点: http ://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html
尽管在此示例中,添加点时范围受到限制,因此要进一步进行操作,当下一个点超出范围时,需要重新调整范围。
正如您所说,setRange 需要最小值和最大值,但您可以在 liveUpdate 中更新它。