QT绘制时间轴图表不显示问题处理

问题的现象

建立并初始化时间轴图表后,设置几个点但是未能在表中绘制出来。

代码

	splineSeries = new QSplineSeries(this);
    splineSeries->setName("spline");
    QPen red(Qt::red);
    red.setWidth(3);
    splineSeries->setPen(red);

    chart = new QChart();
    chart->legend()->hide();
    chart->addSeries(splineSeries);
    chart->setTitle(tr("电池充电曲线"));
    chart->setTheme(QChart::ChartThemeDark);
    chart->setAnimationOptions(QChart::AllAnimations);/**< 动画*/

    /*时间坐标轴X*/
    /*
    QString str = current_time.toString("yyyy-MM-dd hh:mm:ss ddd");
    */
    m_axisX = new QDateTimeAxis;
    m_axisX->setFormat("hh:mm:ss");
    chart->addAxis(m_axisX, Qt::AlignBottom);
    /*初始化设置时间坐标轴范围*/
    m_axisX->setRange(GetDateTimeFromSec(QDateTime::currentSecsSinceEpoch())
                      ,GetDateTimeFromSec(QDateTime::currentSecsSinceEpoch()+DISPLAY_RANGE));
    m_axisX->setTickCount(DISPLAY_RANGE_TICK_COUNT);
    m_axisX->setLabelsVisible(true);
    m_axisX->setTitleText(tr("时间轴"));

    /*数值轴Y*/
    m_axisY = new QValueAxis();
    chart->addAxis(m_axisY, Qt::AlignLeft);
    m_axisY->setRange(0, 100);
    m_axisY->setLabelFormat("%i");
    m_axisY->setTickCount(DISPLAY_RANGE_TICK_COUNT);
    m_axisY->setLabelsVisible(true);
    m_axisY->setTitleText(tr("电量轴"));

    /*坐标轴加入到曲线*/
    splineSeries->attachAxis(m_axisX);
    splineSeries->attachAxis(m_axisY);

    ui->charge_draw_QChartView->setChart(chart);
    /*抗锯齿*/
    ui->charge_draw_QChartView->setRenderHint(QPainter::Antialiasing);
    ui->charge_draw_QChartView->setRubberBand(QChartView::HorizontalRubberBand);
    
	/*手动设置几个点*/
	splineSeries->append(QDateTime::QDateTime::currentSecsSinceEpoch(), 100);
	splineSeries->append(QDateTime::QDateTime::currentSecsSinceEpoch()+100, 50);
	splineSeries->append(QDateTime::QDateTime::currentSecsSinceEpoch()+200, 60);
	splineSeries->append(QDateTime::QDateTime::currentSecsSinceEpoch()+300, 100);

问题处理

最后发现问题出现在设置X时间坐标轴上,在初始化时,x轴的起点为至当前时间经过的时间,最大值为加上一个数值。

设置x轴需要以ms单位数值提供

/*当前secondCount秒转为QDateTime*/
QDateTime current_time = QDateTime::fromSecsSinceEpoch(secondCount);

/*加入点*/
splineSeries->append(current_time.toMSecsSinceEpoch(), y_value);
QT中可以使用QChart和QChartView类来显示随时间变化的图表。下面是一个简单的例子,展示如何使用QChart和QChartView类来实现一个简单的折线图: ```cpp #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include <QtCharts/QValueAxis> QT_CHARTS_USE_NAMESPACE // 创建折线图 QLineSeries *createLineSeries() { QLineSeries *series = new QLineSeries(); // 添加数据 series->append(0, 6); series->append(2, 4); series->append(3, 8); series->append(7, 4); series->append(10, 5); return series; } // 创建图表视图 QChartView *createChartView(QChart *chart) { QChartView *chartView = new QChartView(chart); // 设置图表视图的属性 chartView->setRenderHint(QPainter::Antialiasing); chartView->setRubberBand(QChartView::HorizontalRubberBand); chartView->setToolTipDuration(0); return chartView; } int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建折线图 QLineSeries *series = createLineSeries(); // 创建X轴和Y轴 QValueAxis *axisX = new QValueAxis(); axisX->setRange(0, 10); axisX->setLabelFormat("%g"); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0, 10); axisY->setLabelFormat("%g"); // 创建图表并设置属性 QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("Line Chart Example"); chart->setAxisX(axisX, series); chart->setAxisY(axisY, series); chart->legend()->hide(); // 创建图表视图并显示 QChartView *chartView = createChartView(chart); chartView->resize(400, 300); chartView->show(); return app.exec(); } ``` 在上面的例子中,我们首先创建一个折线图,然后创建X轴和Y轴,并将它们添加到图表中。然后我们创建一个图表视图,并将图表添加到其中。最后,我们显示图表视图。运行程序后,应该可以看到一个简单的折线图,其中包含一些样本数据点。 你可以根据需要修改样本代码,以适应你自己的数据。例如,你可以使用定时器对象来定期更新数据并重新绘制折线图,以实现随时间变化的图表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aron566

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值