123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "scope.h"
- #include "ui_scope.h"
- #include <QGraphicsScene>
- #include <QValueAxis>
- #include <QLineSeries>
- #include <QChart>
- #include <QRandomGenerator>
- #include <QVector>
- scope::scope(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::scope)
- {
- ui->setupUi(this);
- QStandardItemModel* model = treeModel->tree_set();
- ui->tree_set->setModel(model);
- ui->tree_set->expandAll();
- // 将 QTreeView 的 clicked 信号连接到 handleTreeItemClicked 槽函数
- connect(ui->tree_set, &QTreeView::clicked, this, &scope::handleTreeItemClicked);
- }
- scope::~scope()
- {
- delete ui;
- }
- void scope::setTreeModel(tree_model_set* model)
- {
- treeModel = model; // 设置 tree_model_set 实例
- }
- void scope::handleTreeItemClicked(const QModelIndex &index) {
- // 转发信号
- emit treeItemClicked(index);
- }
- //函数功能:初始化图表
- //参数:无
- //返回值:无
- //实现流程:
- //1.创建 QGraphicsScene 并设置到 QGraphicsView
- //2.初始化 lineSeries,如果为空则创建
- //3.创建 QChart 并添加 lineSeries
- //4.创建 QChartView 并将 chart 添加到 QGraphicsScene 中
- void scope::Chart_Init()
- {
- //初始化QChart的实例
- chart = new QChart();
- //初始化QSplineSeries的实例
- lineSeries = new QSplineSeries();
- //设置曲线的名称
- lineSeries->setName("测试曲线");
- //把曲线添加到QChart的实例chart中
- chart->addSeries(lineSeries);
- //声明并初始化X轴、两个Y轴
- QValueAxis *axisX = new QValueAxis();
- QValueAxis *axisY = new QValueAxis();
- //设置坐标轴显示的范围
- axisX->setMin(0);
- axisX->setMax(MAX_X);
- axisY->setMin(-1.5);
- axisY->setMax(MAX_Y);
- //设置坐标轴上的格点
- axisX->setTickCount(10);
- axisY->setTickCount(10);
- //设置坐标轴显示的名称
- QFont font("Microsoft YaHei",8,QFont::Normal);//微软雅黑。字体大小8
- axisX->setTitleFont(font);
- axisY->setTitleFont(font);
- axisX->setTitleText("X-Test");
- axisY->setTitleText("Y-Test");
- //设置网格不显示
- axisY->setGridLineVisible(false);
- //下方:Qt::AlignBottom,左边:Qt::AlignLeft
- //右边:Qt::AlignRight,上方:Qt::AlignTop
- chart->addAxis(axisX, Qt::AlignBottom);
- chart->addAxis(axisY, Qt::AlignLeft);
- //把曲线关联到坐标轴
- lineSeries->attachAxis(axisX);
- lineSeries->attachAxis(axisY);
- //把chart显示到窗口上
- ui->gra_scope11->setChart(chart);
- ui->gra_scope11->setRenderHint(QPainter::Antialiasing); // 设置渲染:抗锯齿,如果不设置那么曲线就显得不平滑
- }
- void scope::DrawLine(float value)
- {
-
-
- // // 如果超过了最大 X 轴范围,移除最早的数据点
- // if (count > MAX_X) {
- // lineSeries->removePoints(0, lineSeries->count() - MAX_X);
-
- // chart->axisX()->setRange(count - MAX_X, count); // 更新 X 轴范围
- // }
- // 遍历 newData,将新的数据点添加到曲线末端
-
- lineSeries->append(count, value); // 添加新的数据点
- chart->axisX()->setRange(0, count); // 更新 X 轴范围
- count++; // 更新点的计数
-
- }
- // 将 generateRandomData测试使用
- QVector<QPointF> scope::generateRandomData(int pointCount) {
- QVector<QPointF> data;
- for (int i = 0; i < pointCount; ++i) {
- qreal x = i;
- qreal y = QRandomGenerator::global()->bounded(0, 100); // 生成0到100之间的随机数
- data.append(QPointF(x, y));
- }
- return data; // 返回数据
- }
- void scope::on_pushButton_clicked()//清空图像
- {
- lineSeries->clear();
- chart->axisX()->setRange(0, 0); // 更新 X 轴范围
- chart->axisY()->setRange(-1.5, 1.5); // 更新 Y 轴范围
- count=0;
- }
|