#include "scope.h" #include "ui_scope.h" #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); } // 图像初始化 void scope::Chart_Init() { // 初始化 QChart 的实例 chart = new QChart(); lineSeries = new QSplineSeries(); lineSeries->setName("测试曲线"); chart->addSeries(lineSeries); // 声明并初始化 X 轴和 Y 轴 QValueAxis *axisX = new QValueAxis(); QValueAxis *axisY = new QValueAxis(); axisX->setRange(0, MAX_X); axisY->setRange(-1.5, MAX_Y); axisX->setTickCount(10); axisY->setTickCount(10); QFont font("Microsoft YaHei", 8, QFont::Normal); axisX->setTitleFont(font); axisY->setTitleFont(font); axisX->setTitleText("X-Test"); axisY->setTitleText("Y-Test"); axisY->setGridLineVisible(false); chart->addAxis(axisX, Qt::AlignBottom); chart->addAxis(axisY, Qt::AlignLeft); lineSeries->attachAxis(axisX); lineSeries->attachAxis(axisY); // 创建一个 QGraphicsScene 并将 chart 添加进去 QGraphicsScene *scene = new QGraphicsScene(this); scene->addItem(chart); // 将 QGraphicsScene 设置到 QGraphicsView ui->gra_scope11->setScene(scene); ui->gra_scope11->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿 // 调整 QGraphicsView 的内容填充整个视口 ui->gra_scope11->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio); // 使 QChart 填充整个 QGraphicsView QRectF viewRect = ui->gra_scope11->viewport()->rect(); chart->resize(viewRect.width(), viewRect.height()); // 设置 QGraphicsView 自动调整大小 ui->gra_scope11->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } void scope::DrawLine(float data) { static int count = 0; if(count > MAX_X) { //当曲线上最早的点超出X轴的范围时,剔除最早的点, lineSeries->removePoints(0,lineSeries->count() - MAX_X); // 更新X轴的范围 chart->axisX()->setMin(count - MAX_X); chart->axisX()->setMax(count); } //增加新的点到曲线末端 lineSeries->append(count, data);// count ++; }