فهرست منبع

add the socpe set,but the set cant show 9 scope and no simulink

flower 9 ماه پیش
والد
کامیت
083f460145
8فایلهای تغییر یافته به همراه421 افزوده شده و 5 حذف شده
  1. 98 0
      code/scope/scope.cpp
  2. 43 0
      code/scope/scope.h
  3. 155 0
      code/scope/scope.ui
  4. 1 1
      code/set/set.ui
  5. 11 2
      code/tcp/tcp.cpp
  6. 3 1
      code/tcp/tcp.h
  7. 2 1
      code/tree/tree_model_set.cpp
  8. 108 0
      mainwindow.cpp

+ 98 - 0
code/scope/scope.cpp

@@ -0,0 +1,98 @@
+#include "scope.h"
+#include "ui_scope.h"
+#include <QGraphicsScene>
+#include <QValueAxis>
+#include <QLineSeries>
+#include <QChart>
+
+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 ++;
+}

+ 43 - 0
code/scope/scope.h

@@ -0,0 +1,43 @@
+#ifndef SCOPE_H
+#define SCOPE_H
+
+#include <QMainWindow>
+#include "code/tree/tree_model_set.h"
+#include <QtCharts/QChartView>
+#include <QtCharts/QSplineSeries>
+//图像设置
+#define MAX_X   50
+#define MAX_Y   1.5
+#define TRUE    1
+#define FALSE   0
+
+namespace Ui {
+class scope;
+}
+
+class scope : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit scope(QWidget *parent = nullptr);
+    void setTreeModel(tree_model_set* model); // 接受 tree_model_set 实例
+    void Chart_Init();
+    void DrawLine(float data);
+    ~scope();
+
+signals:
+    void treeItemClicked(const QModelIndex &index);
+private slots:
+    void handleTreeItemClicked(const QModelIndex &index);
+
+
+private:
+    Ui::scope *ui;
+    tree_model_set* treeModel; // 保存 tree_model_set 实例的指针
+    QChart *chart;
+    QSplineSeries *lineSeries;
+
+};
+
+#endif // SCOPE_H

+ 155 - 0
code/scope/scope.ui

@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>scope</class>
+ <widget class="QMainWindow" name="scope">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1031</width>
+    <height>731</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>曲线显示</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="../../icon/icon.qrc">
+    <normaloff>:/graph-up.svg</normaloff>:/graph-up.svg</iconset>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QGroupBox" name="groupBox">
+      <property name="title">
+       <string/>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>704</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton">
+         <property name="text">
+          <string>PushButton</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btn_one">
+         <property name="text">
+          <string>归一化</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btn_save">
+         <property name="text">
+          <string>保存图像</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QTreeView" name="tree_set">
+        <property name="maximumSize">
+         <size>
+          <width>150</width>
+          <height>16777215</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QGroupBox" name="groupBox_2">
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="title">
+         <string/>
+        </property>
+        <layout class="QGridLayout" name="gridLayout">
+         <property name="leftMargin">
+          <number>1</number>
+         </property>
+         <property name="topMargin">
+          <number>1</number>
+         </property>
+         <property name="rightMargin">
+          <number>1</number>
+         </property>
+         <property name="bottomMargin">
+          <number>1</number>
+         </property>
+         <property name="spacing">
+          <number>1</number>
+         </property>
+         <item row="0" column="0">
+          <widget class="QGraphicsView" name="gra_scope11"/>
+         </item>
+         <item row="0" column="1">
+          <widget class="QGraphicsView" name="graphicsView_2"/>
+         </item>
+         <item row="0" column="2">
+          <widget class="QGraphicsView" name="graphicsView_3"/>
+         </item>
+         <item row="1" column="0">
+          <widget class="QGraphicsView" name="graphicsView_6"/>
+         </item>
+         <item row="1" column="1">
+          <widget class="QGraphicsView" name="graphicsView_5"/>
+         </item>
+         <item row="1" column="2">
+          <widget class="QGraphicsView" name="graphicsView_4"/>
+         </item>
+         <item row="2" column="0">
+          <widget class="QGraphicsView" name="graphicsView_9"/>
+         </item>
+         <item row="2" column="1">
+          <widget class="QGraphicsView" name="graphicsView_8"/>
+         </item>
+         <item row="2" column="2">
+          <widget class="QGraphicsView" name="graphicsView_7"/>
+         </item>
+        </layout>
+       </widget>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>1031</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources>
+  <include location="../../icon/icon.qrc"/>
+  <include location="../../icon/icon.qrc"/>
+ </resources>
+ <connections/>
+</ui>

+ 1 - 1
code/set/set.ui

@@ -61,7 +61,7 @@
           <item>
            <widget class="QGroupBox" name="groupBox_2">
             <property name="title">
-             <string>GroupBox</string>
+             <string/>
             </property>
             <layout class="QHBoxLayout" name="horizontalLayout">
              <item>

+ 11 - 2
code/tcp/tcp.cpp

@@ -1,9 +1,11 @@
 #include "tcp.h"
 #include "ui_tcp.h"
 
-tcp::tcp(QWidget *parent) :
+
+tcp::tcp(QWidget *parent, scope *pageScope) :
     QMainWindow(parent),
-    ui(new Ui::tcp)
+    ui(new Ui::tcp),
+    page_scope(pageScope)  // 初始化 scope
 {
     ui->setupUi(this);
     ui->port->setText("8899");
@@ -45,6 +47,8 @@ void tcp::on_setListen_clicked()
     unsigned short port = ui->port->text().toUShort();  // 获取端口号
     ms->listen(QHostAddress::Any, port);  // 监听所有地址上的指定端口
     ui->setListen->setDisabled(true);  // 禁用监听按钮
+    page_scope->Chart_Init();  // 使用 page_scope 指针调用方法
+    page_scope->show();
 
 }
 
@@ -73,6 +77,8 @@ void tcp::connectClient(QTcpSocket *clientSocket)
             for (int i = 0; i < dataSize; ++i) {
                 double value;
                 memcpy(&value, data.data() + i * sizeof(double), sizeof(double));
+                page_scope->DrawLine(value);  // 使用 page_scope 指针调用方法
+
                 receivedData.append(value);
             }
             QString numbers;
@@ -80,10 +86,13 @@ void tcp::connectClient(QTcpSocket *clientSocket)
             {
                 numbers += QString::number(num, 'f', 6) + " ";
             }
+
             ui->record->append("收到数据: " + numbers.trimmed());
             QString dataSizeStr = QString::number(dataSize);
             ui->msg->append("收到数据长度: " + dataSizeStr);
             data.clear();  // 清空 data
+            page_scope->Chart_Init();
+
         }
     });
 

+ 3 - 1
code/tcp/tcp.h

@@ -6,6 +6,7 @@
 #include <QTcpSocket>
 #include <QLabel>
 #include <QFile>
+#include "code/scope/scope.h"
 
 namespace Ui {
 class tcp;
@@ -16,7 +17,7 @@ class tcp : public QMainWindow
     Q_OBJECT
 
 public:
-    explicit tcp(QWidget *parent = nullptr);
+    explicit tcp(QWidget *parent = nullptr, scope *pageScope = nullptr);  // 传递 scope 对象指针
     ~tcp();
 
 private slots:
@@ -30,6 +31,7 @@ private:
     QTcpServer* ms;
     QTcpSocket* mtcp;
     QLabel* mstatus;
+    scope *page_scope;
     // QFile *file;
     QMap<QTcpSocket*, QString> connectedClients;
     QString sendname;

+ 2 - 1
code/tree/tree_model_set.cpp

@@ -14,12 +14,13 @@ QStandardItemModel* tree_model_set::tree_set()
     // 创建根节点
     QStandardItem *rootItem = new QStandardItem("仿真设置");
     rootItem->setFlags(rootItem->flags() & ~Qt::ItemIsEditable);
+    rootItem->setData("page_main", Qt::UserRole);
     // 创建子节点
     QStandardItem *childItem1 = new QStandardItem("TCP设置");
     childItem1->setFlags(childItem1->flags() & ~Qt::ItemIsEditable);
     childItem1->setData("page_tcp", Qt::UserRole);
     QStandardItem *childItem2 = new QStandardItem("工况设置");
-    childItem2->setFlags(childItem2->flags() & ~Qt::ItemIsEditable);
+    //childItem2->setFlags(childItem2->flags() & ~Qt::ItemIsEditable);
     childItem2->setData("page_set", Qt::UserRole);
     // 将子节点添加到根节点
     rootItem->appendRow(childItem1);

+ 108 - 0
mainwindow.cpp

@@ -0,0 +1,108 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include <QTreeView>
+#include <QDebug>
+
+enum PageIdentifier {//下方函数记得添加识别界面
+    pageIDUnknown = 0, // 未知页面
+    pageID_tcp,         // TCP 界面
+    pageID_set,        // 其他界面(你可以根据需要添加更多枚举值)
+    pageID_main
+};
+
+PageIdentifier stringToPageIdentifier(const QString& item) {
+    if (item == "page_tcp") {
+        return pageID_tcp;
+    } else if (item == "page_set") {
+        return pageID_set;
+    } else if (item == "page_main") {
+        return pageID_main;
+    } else {
+        return pageIDUnknown;
+    }
+}
+
+MainWindow::MainWindow(QWidget *parent)
+    : QMainWindow(parent)  // 调用父类的构造函数
+    , ui(new Ui::MainWindow)
+    , page_tcp(this, &page_scope)   // 初始化 tcp 时传入 MainWindow 和 page_scope
+    , page_scope(this)              // 初始化 scope
+    , page_set(this)     // 初始化 set 时传入 MainWindow 和 page_scope
+{
+    ui->setupUi(this);
+    ui->btn_set->setToolTip("连接");
+    QStandardItemModel* model = treeModel.tree_set();
+    page_set.setTreeModel(&treeModel);
+    ui->tree_set->setModel(model);
+    ui->tree_set->expandAll();
+    connect(ui->tree_set, &QTreeView::clicked, this, &MainWindow::onTreeItemClicked);
+    connect(&page_set, &set::treeItemClicked, this, &MainWindow::onTreeItemClicked);
+    connect(&page_scope, &scope::treeItemClicked, this, &MainWindow::onTreeItemClicked);
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+
+
+
+void MainWindow::onTreeItemClicked(const QModelIndex &index)
+{
+    // 显示index数据形式
+    qDebug() << "Index row:" << index.row();               // 打印行号
+    qDebug() << "Index column:" << index.column();         // 打印列号
+    qDebug() << "Index data:" << index.data().toString();  // 打印该项的数据(文本)
+    // 获取并打印用户定义的标识符
+    QString item = index.data(Qt::UserRole).toString();
+    PageIdentifier pageId = stringToPageIdentifier(item);
+    qDebug() << "index :" <<item;
+    qDebug() << "Page Identifier:" << pageId;       // 打印标识符
+    switch (pageId) {
+    case pageID_main:
+        this->show();
+        break;
+    case pageID_tcp:
+        page_tcp.show(); // 显示 TCP 界面
+        break;
+    case pageID_set:
+        page_set.show(); // 显示 TCP 界面
+        break;
+
+    default:
+        // 处理其他情况或不作任何操作
+        break;
+    }
+}
+//主体窗口功能
+void MainWindow::on_btn_link_clicked()
+{
+    page_tcp.show();
+}
+
+void MainWindow::on_btn_scope_clicked()
+{
+    page_scope.show();
+}
+
+void MainWindow::on_btn_set_clicked()
+{
+    page_set.show();
+}
+//快捷按键入口
+void MainWindow::on_tbtn_link_clicked()
+{
+    page_tcp.show();
+}
+
+void MainWindow::on_tbtn_set_clicked()
+{
+    page_set.show();
+}
+
+void MainWindow::on_tbtn_scope_clicked()
+{
+    page_scope.show();
+}
+