首页 > 解决方案 > Qt - 如何正确更改图表

问题描述

我目前正在为一个朋友开发一个软件,我正在尝试使用 Qt 图表生成一些报告,基本上我为每个月创建一个 QChart 数组QChart *cResumoMensal[12],并使用系列和轴迭代创建QChart和填充:

mesAtual是当前月份,anoAtual是当前年份,cvResumoMensalQChartView

QDateTime dt = QDateTime::currentDateTimeUtc();
mesAtual = dt.date().month();
anoAtual = dt.date().year();

for(int i = 0; i < 12; i++) {

    cResumoMensal[i] = new QChart();
    cResumoMensal[i]->legend()->hide();

    QLineSeries *series = new QLineSeries();

    QDateTimeAxis *dtAxis = new QDateTimeAxis();
    dtAxis->setTickCount(10);
    dtAxis->setTitleText("Data");
    dtAxis->setFormat("dd MMM yyyy");

    QValueAxis *axisY = new QValueAxis();
    axisY->setLabelFormat("%i");
    axisY->setTitleText("Quantidade");

    QVector<PagamentoMes> pagamentos = Mensalidade::pagamentosMes(mesAtual, anoAtual);
    Q_FOREACH(const auto& p, pagamentos) {
        series->append(p.dt.toMSecsSinceEpoch(), p.count);
    }

    cResumoMensal[i]->addAxis(dtAxis, Qt::AlignBottom);
    cResumoMensal[i]->addAxis(axisY, Qt::AlignLeft);

    cResumoMensal[i]->addSeries(series);

    series->attachAxis(dtAxis);
    series->attachAxis(axisY);

    switch(i) {

    case 0:
    {
        cResumoMensal[i]->setTitle("Resumo janeiro");
        ui->lResumoMes->setText("Janeiro");
    }
        break;

    case 1:
    {
        cResumoMensal[i]->setTitle("Resumo fevereiro");
        ui->lResumoMes->setText("Fevereiro");
    }
        break;
    
    ...  

    }

}

cvResumoMensal->setChart(cResumoMensal[mesAtual - 1]);

cvResumoMensal->setChart(cResumoMensal[i])用来更改图表和cvResumoMensal->update()更新图表视图,工作但有问题:

第一个月

现在,当我去下个月时:

第二个月

如您所见,由于图表标题发生了变化,但系列仍然相同,因此图表发生了变化,那么如何QChartView正确更改图表并更新?阅读堆栈溢出中的另一个问题我看到我需要使用repaint()update()但都不起作用

标签: c++qt

解决方案


推荐阅读