• 【Qt-23】基于QCharts绘制曲线图


    一、QChart简介

    QChart是Qt中专门用于绘制图表的模块,支持折线图、柱状图、饼图等常见类型。其主要组成部分有:

    • QChart:整个图表的容器,管理图表中的所有数据和图形属性
    • QChartView:继承自QGraphicsView,用于显示QChart,并且支持缩放和平移等交互操作
    • QLineSeries:折线图数据的容器,用于存储和绘制点之间的连线
    • QValueAxis:坐标轴组件,用于显示坐标轴的标签和刻度线

    二、绘制静态曲线

    1、QT项目pro文件中添加charts

    2、.h文件添加库文件

    #include 

    注:要放在最前面,不然会报一些莫名其妙的错误。

    1. #include
    2. #include
    3. private:
    4. QChart *chart;
    5. QSplineSeries *series;
    6. QChartView *chartview;
    7. private slots:
    8. void MainWindow::Timeout_handler();

    3、.cpp文件添加

    using namespace QtCharts;

     设置图标标题

    chart->setTitle("平均料位");

    添加曲线属性

    1. series->setName(tr("Device 1"));
    2. series->setColor(Qt::red);
    3. series->setPen(QPen(Qt::red, 2));
    4. chart->addSeries(series);

    设置X轴、Y轴属性

    1. //设置X轴属性
    2. QValueAxis *axisX = new QValueAxis;
    3. chart->addAxis(axisX, Qt::AlignBottom);
    4. axisX->setRange(0, 60);
    5. axisX->setTitleText("Time(s)");
    6. series->attachAxis(axisX);
    7. //设置Y轴属性
    8. QValueAxis *axisY = new QValueAxis;
    9. chart->addAxis(axisY, Qt::AlignLeft);
    10. axisY->setRange(0, 60);
    11. axisY->setTitleText("料位");
    12. series->attachAxis(axisY);

     4、拖入Widget控件,提升为QChartView控件

    将图标添加到chartview中

    ui->widget->setChart(chart);

     5、完整示例代码

    mainwindow.h

    1. #include
    2. #include
    3. QT_BEGIN_NAMESPACE
    4. namespace Ui { class MainWindow; }
    5. QT_END_NAMESPACE
    6. class MainWindow : public QMainWindow
    7. {
    8. Q_OBJECT
    9. private:
    10. Ui::MainWindow *ui;
    11. QChart *chart;
    12. QSplineSeries *series;
    13. QChartView *chartview;
    14. private slots:
    15. void MainWindow::Timeout_handler();
    16. }

    mainwindow.cpp

    1. #include <QtSerialPort/qserialport.h>
    2. #include <QtSerialPort/qserialportinfo.h>
    3. using namespace QtCharts;
    4. MainWindow::MainWindow(QWidget *parent)
    5. : QMainWindow(parent)
    6. , ui(new Ui::MainWindow)
    7. {
    8. ui->setupUi(this);
    9. chart = new QChart();
    10. series = new QSplineSeries();
    11. chartview = new QChartView();
    12. //设置图标标题
    13. chart->setTitle("平均料位");
    14. //曲线属性
    15. series->setName(tr("Device 1"));
    16. series->setColor(Qt::red);
    17. series->setPen(QPen(Qt::red, 2));
    18. chart->addSeries(series);
    19. //设置X轴属性
    20. QValueAxis *axisX = new QValueAxis;
    21. chart->addAxis(axisX, Qt::AlignBottom);
    22. //axisX->setTickCount(5);
    23. axisX->setRange(0, 30);
    24. axisX->setTitleText("Time(s)");
    25. series->attachAxis(axisX);
    26. //设置Y轴属性
    27. QValueAxis *axisY = new QValueAxis;
    28. chart->addAxis(axisY, Qt::AlignLeft);
    29. axisY->setRange(0, 90);
    30. axisY->setTitleText("料位");
    31. series->attachAxis(axisY);
    32. Timeout_handler();
    33. //将图标添加到chartview中
    34. ui->widget->setChart(chart);
    35. }
    36. void MainWindow::Timeout_handler()
    37. {
    38. QList<double> data = { 1.2,2.5,5.0,8.3,11.9,13.9,22.9,28.9 };
    39. QList<double> data1 = { 12.76, 45.8,64.9,11.9,36.5,74.9,23.9,55.4 };
    40. for (int i = 0; i < data.size(); i++)
    41. {
    42. series->append(data.at(i), data1.at(i));
    43. }
    44. }

     运行结果:

    三、绘制动态曲线

     使用定时器动态添加数据

    1. QTimer m_timer; // 定时器
    2. connect(&m_timer, &QTimer::timeout, this, &MainWindow::Timeout_handler);
    3. m_timer.start(1000);

    参考链接  Qt(C++)使用QChart动态显示3个设备的温度变化曲线 - 知乎

  • 相关阅读:
    PyTorch构建分类网络(DNN,Mnist数据集)
    Markdown常用快捷键
    Javascript知识【jQuery选择器】
    【C语言】三子棋
    读《反无效努力工作法》
    Qt软件发布(版本信息,Release版程序,代码打包,制作安装包)
    java面试题-常见技术场景
    解决ElementUI表格el-table-column添加fixed底部被遮挡的方法汇总
    如何测试接口?首先你得知道如何开发接口。
    跨平台`ChatGpt` 客户端
  • 原文地址:https://blog.csdn.net/WXG1011/article/details/134415964