QT——Qchart实时动态曲线绘制

以下绘制以时间为横坐标,以随机数为纵坐标的实时动态曲线,此例子是每隔1s更新曲线。

以下是效果图:

1.在UI面板中添加Graphics View,并选择合适位置

 2.点击鼠标右键,选择提升为QChart View.

3.在.pro文件中添加以下代码:

QT       +=charts

4.h文件内容

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QChar>
#include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QSplineSeries>
#include <QValueAxis>
#include <QTimer>
#include <QTime>
#include <QDateTime>
#include <QDateTimeAxis>
#include <QValueAxis>
#include <QSplineSeries>
QT_CHARTS_USE_NAMESPACE
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    int a;
    QTimer *timerDrawLine;
    void Chart_Init();
    void  DrawLine();
    QChart *chart;
    QSplineSeries *lineSeries;
    QDateTime curDateTIme = QDateTime::currentDateTime();

};
#endif // MAINWINDOW_H

 5..cpp主代码

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Chart_Init();

    timerDrawLine = new QTimer();
    timerDrawLine->start(1000);
    connect(timerDrawLine,&QTimer::timeout,[=](){
    DrawLine();
    });
}

6.Chart_Init()的作用是对曲线进行基本设置

void MainWindow::Chart_Init()
{
    //初始化QChart
    chart = new QChart();
    //初始化QSplineSeries
    lineSeries = new QSplineSeries();
    //设置曲线的名称
    lineSeries->setName("随机数测试曲线");
    //把曲线添加到QChart的实例chart中
    chart->addSeries(lineSeries);
    //声明并初始化X轴、两个Y轴
    QDateTimeAxis *axisX = new QDateTimeAxis();//x轴为时间轴
    QValueAxis *axisY = new QValueAxis();


    //设置x坐标轴
    axisX->setTitleText("时间(分:秒)");
    // 隐藏背景网格X轴框线
    axisX->setGridLineVisible(false);
    // x轴显示的文字倾斜角度
    axisX->setLabelsAngle(0);
    // 轴上点的个数
    axisX->setTickCount(10);
    axisX->setFormat("mm:ss");

    //设置y坐标轴上的格点
    axisY->setTickCount(10);   
    axisY->setMin(-5);
    axisY->setMax(20);
    //设置坐标轴显示的名称
    QFont font("Microsoft YaHei",8,QFont::Normal);//微软雅黑。字体大小8
    axisX->setTitleFont(font);
    axisY->setTitleFont(font);
    axisX->setTitleText("X-Test");
    axisY->setTitleText("mm:ss");
    //设置网格不显示
    axisY->setGridLineVisible(false);
    
    //把曲线关联到坐标轴
    lineSeries->attachAxis(axisX);
    lineSeries->attachAxis(axisY);
    //把chart显示到窗口上
    ui->graphicsView->setChart(chart);
    // 设置渲染:抗锯齿,如果不设置那么曲线就显得不平滑
    ui->graphicsView->setRenderHint(QPainter::Antialiasing);     
}

7.每隔1s更新坐标,更新的槽函数为DrawLine().

void MainWindow:: DrawLine()
 {
        // 更新X轴的范围
        chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-1*10));
        chart->axisX()->setMax(QDateTime::currentDateTime().addSecs(0));
        //在线上添加点
        lineSeries->append(QDateTime::currentDateTime().toMSecsSinceEpoch(), rand()%20);
 }

  • 22
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Qt是一个跨平台的应用程序开发框架,它提供了丰富的图形界面组件和功能库。C++Qt的主要编程语言,而QChart是Qt提供的一个用于绘制图表的模块。 实时动态绘制曲线是指通过不断更新数据,并在图表上实时展示出来,形成曲线的变化过程。在Qt中使用QChart实现实时动态绘制曲线,可以按照以下步骤进行: 1. 首先,引入必要的头文件和命名空间: #include <QtWidgets/QApplication> #include <QtWidgets/QMainWindow> #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include <QTimer> QT_CHARTS_USE_NAMESPACE 2. 创建主窗口,并设置布局: QMainWindow window; QHBoxLayout *mainLayout = new QHBoxLayout; window.setLayout(mainLayout); 3. 创建一个QChart对象,并设置为主窗口的中心部件: QLineSeries *series = new QLineSeries; QChart *chart = new QChart; chart->addSeries(series); chart->createDefaultAxes(); chart->legend()->hide(); QChartView *chartView = new QChartView(chart); mainLayout->addWidget(chartView); 4. 创建一个定时器,并设置定时器的超时槽函数。在该槽函数中更新曲线数据,并重新绘制QTimer *timer = new QTimer; QObject::connect(timer, &QTimer::timeout, [&series]() { static qreal x = 0; static qreal y = 0; series->append(x, y); // 更新数据 x++; y++; }); 5. 启动定时器,并显示主窗口: timer->start(100); // 设置定时器间隔,单位为毫秒 window.show(); return app.exec(); 通过以上步骤,我们可以在Qt中使用QChart实现实时动态绘制曲线。定时器每隔一定的时间间隔触发,更新曲线的数据,并实时绘制在图表上,从而实现曲线动态变化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值