scope.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "scope.h"
  2. #include "ui_scope.h"
  3. #include <QGraphicsScene>
  4. #include <QValueAxis>
  5. #include <QLineSeries>
  6. #include <QChart>
  7. #include <QRandomGenerator>
  8. #include <QVector>
  9. scope::scope(QWidget *parent) :
  10. QMainWindow(parent),
  11. ui(new Ui::scope)
  12. {
  13. ui->setupUi(this);
  14. QStandardItemModel* model = treeModel->tree_set();
  15. ui->tree_set->setModel(model);
  16. ui->tree_set->expandAll();
  17. // 将 QTreeView 的 clicked 信号连接到 handleTreeItemClicked 槽函数
  18. connect(ui->tree_set, &QTreeView::clicked, this, &scope::handleTreeItemClicked);
  19. }
  20. scope::~scope()
  21. {
  22. delete ui;
  23. }
  24. void scope::setTreeModel(tree_model_set* model)
  25. {
  26. treeModel = model; // 设置 tree_model_set 实例
  27. }
  28. void scope::handleTreeItemClicked(const QModelIndex &index) {
  29. // 转发信号
  30. emit treeItemClicked(index);
  31. }
  32. //函数功能:初始化图表
  33. //参数:无
  34. //返回值:无
  35. //实现流程:
  36. //1.创建 QGraphicsScene 并设置到 QGraphicsView
  37. //2.初始化 lineSeries,如果为空则创建
  38. //3.创建 QChart 并添加 lineSeries
  39. //4.创建 QChartView 并将 chart 添加到 QGraphicsScene 中
  40. void scope::Chart_Init()
  41. {
  42. //初始化QChart的实例
  43. chart = new QChart();
  44. //初始化QSplineSeries的实例
  45. lineSeries = new QSplineSeries();
  46. //设置曲线的名称
  47. lineSeries->setName("测试曲线");
  48. //把曲线添加到QChart的实例chart中
  49. chart->addSeries(lineSeries);
  50. //声明并初始化X轴、两个Y轴
  51. QValueAxis *axisX = new QValueAxis();
  52. QValueAxis *axisY = new QValueAxis();
  53. //设置坐标轴显示的范围
  54. axisX->setMin(0);
  55. axisX->setMax(MAX_X);
  56. axisY->setMin(-1.5);
  57. axisY->setMax(MAX_Y);
  58. //设置坐标轴上的格点
  59. axisX->setTickCount(10);
  60. axisY->setTickCount(10);
  61. //设置坐标轴显示的名称
  62. QFont font("Microsoft YaHei",8,QFont::Normal);//微软雅黑。字体大小8
  63. axisX->setTitleFont(font);
  64. axisY->setTitleFont(font);
  65. axisX->setTitleText("X-Test");
  66. axisY->setTitleText("Y-Test");
  67. //设置网格不显示
  68. axisY->setGridLineVisible(false);
  69. //下方:Qt::AlignBottom,左边:Qt::AlignLeft
  70. //右边:Qt::AlignRight,上方:Qt::AlignTop
  71. chart->addAxis(axisX, Qt::AlignBottom);
  72. chart->addAxis(axisY, Qt::AlignLeft);
  73. //把曲线关联到坐标轴
  74. lineSeries->attachAxis(axisX);
  75. lineSeries->attachAxis(axisY);
  76. //把chart显示到窗口上
  77. ui->gra_scope11->setChart(chart);
  78. ui->gra_scope11->setRenderHint(QPainter::Antialiasing); // 设置渲染:抗锯齿,如果不设置那么曲线就显得不平滑
  79. }
  80. void scope::DrawLine(float value)
  81. {
  82. // // 如果超过了最大 X 轴范围,移除最早的数据点
  83. // if (count > MAX_X) {
  84. // lineSeries->removePoints(0, lineSeries->count() - MAX_X);
  85. // chart->axisX()->setRange(count - MAX_X, count); // 更新 X 轴范围
  86. // }
  87. // 遍历 newData,将新的数据点添加到曲线末端
  88. lineSeries->append(count, value); // 添加新的数据点
  89. chart->axisX()->setRange(0, count); // 更新 X 轴范围
  90. count++; // 更新点的计数
  91. }
  92. // 将 generateRandomData测试使用
  93. QVector<QPointF> scope::generateRandomData(int pointCount) {
  94. QVector<QPointF> data;
  95. for (int i = 0; i < pointCount; ++i) {
  96. qreal x = i;
  97. qreal y = QRandomGenerator::global()->bounded(0, 100); // 生成0到100之间的随机数
  98. data.append(QPointF(x, y));
  99. }
  100. return data; // 返回数据
  101. }
  102. void scope::on_pushButton_clicked()//清空图像
  103. {
  104. lineSeries->clear();
  105. chart->axisX()->setRange(0, 0); // 更新 X 轴范围
  106. chart->axisY()->setRange(-1.5, 1.5); // 更新 Y 轴范围
  107. count=0;
  108. }