QT += core gui charts
#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>
#include <QDateTime>
#include <QTimer>
#include <QtCharts>
// 创建一个柱状图系列
QBarSeries *series = new QBarSeries();
// 创建一个柱状图集,用于存储数据
QBarSet *set = new QBarSet("数据");
set->append(400);
series->append(set);
// 创建一个类别轴,用于显示时间
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->setTitleText("时间");
QString currentTime = QDateTime::currentDateTime().toString("hh:mm:ss");
axisX->append(currentTime);
// 创建一个值轴,用于显示数值
QValueAxis *axisY = new QValueAxis();
axisY->setTitleText("数值");
// 创建一个图表,并添加系列和轴
QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("动态柱状图示例");
chart->setAnimationOptions(QChart::SeriesAnimations);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisX);
series->attachAxis(axisY);
// 创建一个图表视图,并设置图表
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
ui->widget->layout()->addWidget(chartView);
// ui->widget->layout()->addwidget(chartView);
// 显示图表视图
chartView->show();
//todo:测试专用
// 创建一个定时器,用于定时更新数据
QTimer *timer=new QTimer;
// 启动定时器,每隔1秒触发一次
timer->start(100);
connect(timer,&QTimer::timeout,[=](){
// 获取当前时间,并将其转换为字符串格式
QString currentTime = QDateTime::currentDateTime().toString("hh:mm:ss");
// 生成一个随机数作为数据点的值
qreal value = qrand() % 100;
// 将数据点添加到柱状图集中
set->append(value);
// 更新类别轴的范围以适应新的时间标签
if (axisX->categories().size() > 10) {
axisX->remove(axisX->categories().at(0));
}
axisX->append(currentTime);
// 更新值轴的范围以适应新的数据点
axisY->setRange(0, qMax(axisY->max(), value));
});