scope.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "scope.h"
  2. #include "ui_scope.h"
  3. #include <QGraphicsScene>
  4. #include <QValueAxis>
  5. #include <QLineSeries>
  6. #include <QChart>
  7. scope::scope(QWidget *parent) :
  8. QMainWindow(parent),
  9. ui(new Ui::scope)
  10. {
  11. ui->setupUi(this);
  12. QStandardItemModel* model = treeModel->tree_set();
  13. ui->tree_set->setModel(model);
  14. ui->tree_set->expandAll();
  15. // 将 QTreeView 的 clicked 信号连接到 handleTreeItemClicked 槽函数
  16. connect(ui->tree_set, &QTreeView::clicked, this, &scope::handleTreeItemClicked);
  17. }
  18. scope::~scope()
  19. {
  20. delete ui;
  21. }
  22. void scope::setTreeModel(tree_model_set* model)
  23. {
  24. treeModel = model; // 设置 tree_model_set 实例
  25. }
  26. void scope::handleTreeItemClicked(const QModelIndex &index) {
  27. // 转发信号
  28. emit treeItemClicked(index);
  29. }
  30. // 图像初始化
  31. void scope::Chart_Init()
  32. {
  33. // 初始化 QChart 的实例
  34. chart = new QChart();
  35. lineSeries = new QSplineSeries();
  36. lineSeries->setName("测试曲线");
  37. chart->addSeries(lineSeries);
  38. // 声明并初始化 X 轴和 Y 轴
  39. QValueAxis *axisX = new QValueAxis();
  40. QValueAxis *axisY = new QValueAxis();
  41. axisX->setRange(0, MAX_X);
  42. axisY->setRange(-1.5, MAX_Y);
  43. axisX->setTickCount(10);
  44. axisY->setTickCount(10);
  45. QFont font("Microsoft YaHei", 8, QFont::Normal);
  46. axisX->setTitleFont(font);
  47. axisY->setTitleFont(font);
  48. axisX->setTitleText("X-Test");
  49. axisY->setTitleText("Y-Test");
  50. axisY->setGridLineVisible(false);
  51. chart->addAxis(axisX, Qt::AlignBottom);
  52. chart->addAxis(axisY, Qt::AlignLeft);
  53. lineSeries->attachAxis(axisX);
  54. lineSeries->attachAxis(axisY);
  55. // 创建一个 QGraphicsScene 并将 chart 添加进去
  56. QGraphicsScene *scene = new QGraphicsScene(this);
  57. scene->addItem(chart);
  58. // 将 QGraphicsScene 设置到 QGraphicsView
  59. ui->gra_scope11->setScene(scene);
  60. ui->gra_scope11->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿
  61. // 调整 QGraphicsView 的内容填充整个视口
  62. ui->gra_scope11->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
  63. // 使 QChart 填充整个 QGraphicsView
  64. QRectF viewRect = ui->gra_scope11->viewport()->rect();
  65. chart->resize(viewRect.width(), viewRect.height());
  66. // 设置 QGraphicsView 自动调整大小
  67. ui->gra_scope11->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  68. }
  69. void scope::DrawLine(float data)
  70. {
  71. static int count = 0;
  72. if(count > MAX_X)
  73. {
  74. //当曲线上最早的点超出X轴的范围时,剔除最早的点,
  75. lineSeries->removePoints(0,lineSeries->count() - MAX_X);
  76. // 更新X轴的范围
  77. chart->axisX()->setMin(count - MAX_X);
  78. chart->axisX()->setMax(count);
  79. }
  80. //增加新的点到曲线末端
  81. lineSeries->append(count, data);//
  82. count ++;
  83. }