打开QtCreator新建个Widgets项目,先别急着写代码。记得在.pro文件里加上charts模块,不然编译时候能把你整懵了

📅 发布时间:2026/7/6 21:18:42 👁️ 浏览次数:
打开QtCreator新建个Widgets项目,先别急着写代码。记得在.pro文件里加上charts模块,不然编译时候能把你整懵了
基于qt 的qtchart函数曲线实例源码涵盖了大部分属性设置 (注意不是pyqt)QT core gui charts咱们先整个正弦波开开胃。在MainWindow头文件里塞几个关键组件#include QtCharts QChartView *chartView; QSplineSeries *series; QValueAxis *axisX, *axisY;初始化部分得把骨头架子搭好。在MainWindow构造函数里搞点事情// 创建曲线对象 series new QSplineSeries(); series-setName(颤抖的正弦波); series-setPointsVisible(true); // 显示数据点 // 造点假数据 for(int i0; i500; i){ series-append(i*0.1, qSin(i*0.1)); } // 坐标轴别马虎 axisX new QValueAxis; axisX-setRange(0, 50); // 先显示前50个点 axisX-setTitleText(时间(s)); axisX-setLabelFormat(%.1f); // 标签显示一位小数 axisY new QValueAxis; axisY-setRange(-2, 2); axisY-setTitleText(振幅); axisY-setTitleRotation(-90); // 竖着显示Y轴标题 // 图表组装车间 QChart *chart new QChart(); chart-addSeries(series); chart-setAxisX(axisX, series); chart-setAxisY(axisY, series); chart-legend()-setAlignment(Qt::AlignBottom); // 图例放底部 // 视觉增强套餐 chart-setAnimationOptions(QChart::AllAnimations); chart-setBackgroundBrush(QBrush(Qt::lightGray)); // 背景色 chart-setPlotAreaBackgroundVisible(true); // 绘图区背景 chartView new QChartView(chart); setCentralWidget(chartView);跑起来你会看到个会动的正弦波但总觉得差点意思加点佐料// 曲线样式大改造 QPen pen(Qt::darkBlue); pen.setWidth(2); pen.setStyle(Qt::DashDotLine); series-setPen(pen); // 网格线要够骚 axisX-setGridLineColor(Qt::darkGray); axisY-setGridLineColor(Qt::darkGray); axisX-setMinorGridLineColor(Qt::lightGray); // 次级网格线 axisY-setMinorGridLineVisible(true); // 抗锯齿必须开 chartView-setRenderHint(QPainter::Antialiasing);动态更新才是重头戏。在类里加个定时器QTimer *dataTimer;初始化时启动dataTimer new QTimer(this); connect(dataTimer, QTimer::timeout, this, MainWindow::updateData); dataTimer-start(100); // 每100ms更新实现数据更新函数void MainWindow::updateData(){ static double x 50.0; // 接续之前的数据 static int count 0; x 0.1; qreal y qSin(x) (qrand()%100-50)/100.0; // 加点噪声 series-append(x, y); // 保持显示最新50个点 if(count 50){ axisX-setRange(x-5.0, x0.1); series-remove(0); // 删除旧数据防内存泄漏 } }几个容易踩的坑数据量大了记得及时清理否则内存分分钟爆炸坐标轴范围更新要平滑可以用chart-scroll(10,0)实现滚动效果想换曲线类型把QSplineSeries换成QLineSeries立马变折线图鼠标交互可通过chart-setAcceptHoverEvents(true)开启完整源码建议放在GitHubGist这里重点是把各种花样玩法说透。最后效果应该是个带噪声的实时曲线自动向右滚动背景带网格线还有丝滑的动画过渡。基于qt 的qtchart函数曲线实例源码涵盖了大部分属性设置 (注意不是pyqt)