我很难理解如何使用Qt图表更新数据。
我实现了所有基础知识(系列,图表,chartview),并将数据添加到系列中。 但是,所示曲线仅包含0值。
widgetHistogramm::widgetHistogramm(QWidget *parent) : QWidget(parent)
{
// create line Series for the data
series = new QLineSeries();
// create Chart Object (QWidget)
chart = new QChart();
chart->legend()->hide();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("Histogramm");
xAxis = new QtCharts::QValueAxis;
yAxis = new QtCharts::QValueAxis;
chart->setAxisX(xAxis);
chart->setAxisY(yAxis);
// create a view inside the Chart
chartView = new QChartView(chart, this);
// Create a layout and add Chart
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(chartView);
}
widgetHistogramm::~widgetHistogramm()
{
}
void widgetHistogramm::setData(const std::vector<int> data)
{
auto max = *max_element(std::begin(data), std::end(data));
chart->axisX()->setRange(0, data.size());
chart->axisY()->setRange(0, max);
series->clear();
for(std::vector<int>::size_type i = 0; i != data.size(); i++) {
series->append(i, data[i]);
}
chart->update();
}
此外,我想知道何时显示数据。在每个append
上还是仅在update
上?
答案 0 :(得分:1)
该问题是由chart->setAxisX()
和chart->setAxisY()
引起的,您必须通过以下一系列操作:
chart->setAxisX(xAxis, series);
chart->setAxisY(yAxis, series);
或者只是删除这些行,因为在调用createDefaultAxes()
时您正在创建轴。
另一方面,您不应调用update()
,每次添加或删除该系列的元素时,这都会通过内部调用update().