如何在QtCharts中自动重新缩放轴?

时间:2016-09-09 10:55:43

标签: c++ qt qtchart

我正在使用QtCharts

我需要在追加值后重新调整两个轴。我附加的值不在0和1之间,也不是从1970年开始。

QtChart axis wrong scaled

我的对话框的构造函数代码如下所示:

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()看起来不太好,因为我需要设置最小值和最大值。

2 个答案:

答案 0 :(得分:1)

我不知道自动调整的方法,但你可以看一下这个动态地向图表添加点的示例: http://doc.qt.io/qt-5/qtcharts-dynamicspline-example.html

虽然在这个例子中,当添加点时范围受到限制,因此为了更进一步,当下一个点不在时,需要重新调整范围。

正如您所说,setRange需要最小值和最大值,但您可以在liveUpdate中更新它。

答案 1 :(得分:0)

关于m_series-> append()中的第一个参数。使用“qint64 QDateTime :: toMSecsSincPoch()”更好.... 像:

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