• Qt学习笔记NO1. QtChart学习使用笔记


    一、参考学习资料

    QtChart 官方手册:https://doc.qt.io/qt-5/qtcharts-index.html

    或者直接看Qt软件帮助手册

    二、QtChart 相关应用介绍

    2.1 使用前,添加头文件、命名空间、组件

     2.2 Chart Types对应效果介绍

    2.2.1 折线图和样条图

     折线图使用:  QLineSeries类

    1. QLineSeries* series = new QLineSeries();
    2. series->append(0, 6);
    3. series->append(2, 4);
    4. ...
    5. chart->addSeries(series);

     样条图使用:QSplineSeries Class

    1. QSplineSeries* series = new QSplineSeries();
    2. series->append(0, 6);
    3. series->append(2, 4);
    4. ...
    5. chart->addSeries(series);

    2.2.2 面积图和散点图

     感觉不会常用,不深入研究

    2.2.3 柱状图Bar Charts

     

    2.3 轴Axes

    Qt主要支持五种轴类型:

          

     QAbstractAxis class : 用于刻度线轴

     QValueAxis class  : 数据轴,常用

    1. QChartView *chartView = new QChartView;
    2. QLineSeries *series = new QLineSeries;
    3. // ...
    4. chartView->chart()->addSeries(series);
    5. QValueAxis *axisX = new QValueAxis;
    6. axisX->setRange(10, 20.5);
    7. axisX->setTickCount(10);
    8. axisX->setLabelFormat("%.2f");
    9. chartView->chart()->setAxisX(axisX, series);

    其他感觉不常用,不深入研究

    2.4 Legend 图例

    2.5 Themes 主题

    效果如下:

     

    三、学习例程Example

    3.1 放大缩小图像 Zoom Line Example

    3.1.1 先创建举例图像

    1. QLineSeries *series = new QLineSeries();
    2. for (int i = 0; i < 500; i++) {
    3. QPointF p((qreal) i, qSin(M_PI / 50 * i) * 100);
    4. p.ry() += qrand() % 20;
    5. *series << p;
    6. }
    7. Chart *chart = new Chart();
    8. chart->addSeries(series);
    9. chart->setTitle("Zoom in/out example");
    10. chart->setAnimationOptions(QChart::SeriesAnimations);
    11. chart->legend()->hide();
    12. chart->createDefaultAxes();
    13. ChartView *chartView = new ChartView(chart);
    14. chartView->setRenderHint(QPainter::Antialiasing);
    15. QMainWindow window;
    16. window.setCentralWidget(chartView);
    17. window.resize(400, 300);
    18. window.grabGesture(Qt::PanGesture);
    19. window.grabGesture(Qt::PinchGesture);
    20. window.show();

    3.1.2  create a custom chart view

    重写鼠标按键相关函数

    1. protected:
    2. bool viewportEvent(QEvent *event);
    3. void mousePressEvent(QMouseEvent *event);
    4. void mouseMoveEvent(QMouseEvent *event);
    5. void mouseReleaseEvent(QMouseEvent *event);
    6. void keyPressEvent(QKeyEvent *event);

    按键操作

    关键在于zoomIn()/zoomOut()函数调用

    1. void ChartView::keyPressEvent(QKeyEvent *event)
    2. {
    3. switch (event->key()) {
    4. case Qt::Key_Plus:
    5. chart()->zoomIn();
    6. break;
    7. case Qt::Key_Minus:
    8. chart()->zoomOut();
    9. break;
    10. case Qt::Key_Left:
    11. chart()->scroll(-10, 0);
    12. break;
    13. case Qt::Key_Right:
    14. chart()->scroll(10, 0);
    15. break;
    16. case Qt::Key_Up:
    17. chart()->scroll(0, 10);
    18. break;
    19. case Qt::Key_Down:
    20. chart()->scroll(0, -10);
    21. break;
    22. default:
    23. QGraphicsView::keyPressEvent(event);
    24. break;
    25. }
    26. }

    3.1.3  编写chart操作重构手势事件

    1. bool Chart::sceneEvent(QEvent *event)
    2. {
    3. if (event->type() == QEvent::Gesture)
    4. return gestureEvent(static_cast(event));
    5. return QChart::event(event);
    6. }
    7. bool Chart::gestureEvent(QGestureEvent *event)
    8. {
    9. if (QGesture *gesture = event->gesture(Qt::PanGesture)) {
    10. QPanGesture *pan = static_cast(gesture);
    11. QChart::scroll(-(pan->delta().x()), pan->delta().y());
    12. }
    13. if (QGesture *gesture = event->gesture(Qt::PinchGesture)) {
    14. QPinchGesture *pinch = static_cast(gesture);
    15. if (pinch->changeFlags() & QPinchGesture::ScaleFactorChanged)
    16. QChart::zoom(pinch->scaleFactor());
    17. }
    18. return true;
    19. }

    3.2 查看折线点数据 Callout Example

     主要调用QChart类两个函数

  • 相关阅读:
    mongoDB安装教程
    pinia的基本使用和核心实现原理
    深入浅出图神经网络【阅读笔记】
    数据库索引的基本操作(sql语句)
    Android studio设置与测试机屏幕大小相同的布局预览
    自动化测试框架Pytest(四) ——数据驱动
    [蓝桥杯 2023 省 B] 冶炼金属
    Opencv实现对象跟踪
    二刷力扣--链表
    2023年 图表示学习、知识图谱相关SCI专刊与会议整理
  • 原文地址:https://blog.csdn.net/qq_31441951/article/details/126634547