如果有QLineSeries和QChart。
我希望添加一个新点会自动更新图表。但发现让它更新图表的唯一方法是这段可怕的代码:
//
// Add the score and update the score chart
//
if (nullptr != scoreSeries)
scoreChart->removeSeries(scoreSeries);
else
{
scoreSeries = new QLineSeries(this);
scoreSeries->setName(tr("Score", "IDC_SCORE"));
scoreSeries->setPointsVisible(true);
connect(scoreSeries, &QLineSeries::hovered,
this, &ChartTab::scoreHovered);
}
scoreSeries->append(x, fScore);
scoreMap.emplace(name, size - 1);
scoreChart->addSeries(scoreSeries);
scoreChart->createDefaultAxes();
axes = scoreChart->axes(Qt::Horizontal);
for (const auto& p : axes)
{
QValueAxis* axis{ dynamic_cast<QValueAxis*>(p) };
if (axis)
{
axis->setRange(1.0, size);
axis->setTickAnchor(1.0);
axis->setTickType(QValueAxis::TicksDynamic);
axis->setTickInterval(interval);
}
}
我相信有一个更好的方法来更新图表,当我追加到线系列,但到目前为止,我还没有找到任何实际工作。
请让我摆脱痛苦,告诉我这件事该怎么办。
我使用的是Qt 6.5.1,但我怀疑这会有很大的不同。
1条答案
按热度按时间dluptydi1#
如果添加的点在图表的坐标轴范围之外,那么您将什么也看不到(就像我一样)。
因此,您需要创建线系列和轴,然后在附加新点之前调整轴范围。
因此,在我的类头中定义了以下内联函数:
在ctor中:
然后在mf中添加我需要的点:
我希望这能帮助其他正在与QChart斗争的人。
大卫