#include "scope.h" #include "ui_scope.h" #include #include #include #include #include #include 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 scope::generateRandomData(int pointCount) { QVector 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; }