Qt —— QChart以时间为x轴绘制曲线(附代码)

本文展示了如何使用Qt的QChart组件,以当前时间加10秒作为x轴,显示角度信息为y轴,创建并展示两条曲线,并添加动画效果。通过在曲线对象上append数据后调用QChartView::repaint实现动态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🔔 Qt 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…)


效果

     绘制两条曲线,加入对应的图例。

     x轴为当前时间加了10秒(显示为分钟:秒),y轴显示角度信息。

     曲线显示加入了动画效果(一行代码)。后期需要动态更新曲线则使用曲线对象append曲线数据后调用QChartView::repaint即可。


在这里插入图片描述

代码
#include <QWidget>
### 如何使用 QT 进行 Plot 绘制曲线Qt 中,可以借助多种库实现绘制曲线的功能。以下是基于 `Qwt` 库和 `QtCharts` 的两种常用方式。 #### 方法一:使用 Qwt 实现动态曲线绘制 Qwt 是一个强大的第三方库,用于扩展 Qt 的绘图能力。下面是一个完整的示例代码: ```cpp #include <qapplication.h> #include <qwt_plot.h> #include <qwt_plot_curve.h> #include <qwt_plot_grid.h> #include <qtimer.h> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建绘图窗口 QwtPlot plot; plot.setTitle("Dynamic Curve Example"); plot.setAxisTitle(QwtPlot::xBottom, "Time (s)"); plot.setAxisTitle(QwtPlot::yLeft, "Value"); // 添加网格 QwtPlotGrid *grid = new QwtPlotGrid(); grid->attach(&plot); // 定义数据容器 QVector<double> xData(0), yData(0); // 创建曲线对象并加到绘图区域 QwtPlotCurve *curve = new QwtPlotCurve("Sample Curve"); curve->setSamples(xData, yData); curve->attach(&plot); // 显示初始状态 plot.resize(800, 600); plot.show(); // 设置定时器更新数据 QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&]() { static double time = 0.0; const double value = qSin(time); // 示例数据源 // 更新数据 xData.append(time); yData.append(value); if (xData.size() > 100) { // 控制最大点数 xData.removeFirst(); yData.removeFirst(); } // 刷新曲线 curve->setSamples(xData, yData); plot.replot(); time += 0.1; // 时间步长 }); // 启动定时器 timer.start(100); return app.exec(); } ``` 上述代码展示了如何通过 `QwtPlot` 和 `QwtPlotCurve` 来实现实时动态曲线绘制[^3]。 --- #### 方法二:使用 QtCharts 绘制静态或动态曲线 Qt 提供了一个官方支持的模块——QtCharts,它能够轻松完成各种类型的图表绘制。下面是使用 `QtCharts` 的简单例子: ```cpp #include <QtWidgets/QApplication> #include <QtCharts/QChartView> #include <QtCharts/QSplineSeries> #include <QtCharts/QValueAxis> using namespace QtCharts; int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建样条系列 QSplineSeries *series = new QSplineSeries(); series->setName("Sample Series"); // 添加一些测试数据 for (double i = 0; i < 10; ++i) { series->append(i, qSin(i)); } // 创建坐标 QValueAxis *axisX = new QValueAxis(); axisX->setTitleText("X Axis"); axisX->setLabelFormat("%.1f"); axisX->setRange(0, 10); QValueAxis *axisY = new QValueAxis(); axisY->setTitleText("Y Axis"); axisY->setLabelFormat("%.2f"); axisY->setRange(-1, 1); // 创建图表并绑定序列和坐标 QChart *chart = new QChart(); chart->addSeries(series); chart->createDefaultAxes(); chart->setAxisX(axisX, series); chart->setAxisY(axisY, series); chart->legend()->hide(); // 隐藏图例 // 创建 ChartView 并显示 QChartView view(chart); view.setRenderHint(QPainter::Antialiasing); view.resize(800, 600); view.setWindowTitle("Static Sine Wave with QtCharts"); view.show(); return a.exec(); } ``` 此代码片段演示了如何利用 `QtCharts` 模块中的 `QSplineSeries` 和自定义坐标绘制一条正弦波形曲线[^4]。 --- #### 总结 以上分别介绍了基于 `Qwt` 和 `QtCharts` 的两种不同方案来实现 Qt 曲线绘制功能。如果项目需要更灵活、高效的解决方案,则推荐选用 `Qwt`;而如果是快速开发场景下希望减少依赖复杂度,则可优先考虑内置的 `QtCharts` 模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

信必诺

嗨,支持下哥们呗。

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

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

打赏作者

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

抵扣说明:

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

余额充值