Qt图表,系列未显示

时间:2018-06-22 08:43:59

标签: c++ qt charts qt5

我很难理解如何使用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上?

1 个答案:

答案 0 :(得分:1)

该问题是由chart->setAxisX()chart->setAxisY()引起的,您必须通过以下一系列操作:

chart->setAxisX(xAxis, series);
chart->setAxisY(yAxis, series);

或者只是删除这些行,因为在调用createDefaultAxes()时您正在创建轴。

另一方面,您不应调用update(),每次添加或删除该系列的元素时,这都会通过内部调用update().

来通知视图