UI优化
authorSnickerSun <snickersun@163.com>
Thu, 4 Dec 2025 08:20:56 +0000 (16:20 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 4 Dec 2025 08:20:56 +0000 (16:20 +0800)
mainwindow.cpp
mainwindow.h
mainwindow.ui

index 6143792..d7e7963 100644 (file)
 #include <QUrl>
 #include <QCoreApplication>
 #include <QTextCodec>
+#include <QComboBox>
+#include <QAbstractItemView>
+#include <QFontMetrics>
 
 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
     , ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
-    setWindowTitle("雷鸟产测工具");
+    setWindowTitle("雷鸟产测工具 V1.1");
     
     // 确保控制台输出使用UTF-8编码
     QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
@@ -94,6 +97,10 @@ MainWindow::MainWindow(QWidget *parent)
     currentAudioStep = AUDIO_PLAYING_1KHZ;
     currentModemVersion = "";
     currentSimStatus = -1;
+    // 初始化日志文件相关变量
+    testLogFile = nullptr;
+    testLogStream = nullptr;
+    testLogFilePath = "";
     
     // 初始化按键测试状态
     for (int i = 0; i < 4; i++) {
@@ -114,6 +121,9 @@ MainWindow::MainWindow(QWidget *parent)
 
 MainWindow::~MainWindow()
 {
+    // 关闭日志文件
+    closeTestLogFile();
+    
     delete ui;
     if (serial->isOpen()) {
         serial->close();
@@ -133,8 +143,24 @@ void MainWindow::updateSerialPorts()
     ui->portNameBox->clear();
     // 获取所有可用串口
     const auto infos = QSerialPortInfo::availablePorts();
+    int maxWidth = 0;
+    QFontMetrics fm(ui->portNameBox->font());
     for (const QSerialPortInfo &info : infos) {
-        ui->portNameBox->addItem(info.portName() + " (" + info.description() + ")");
+        QString itemText = info.portName() + " (" + info.description() + ")";
+        ui->portNameBox->addItem(itemText);
+        // 计算文本宽度,找出最长的项
+        #if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
+        int textWidth = fm.horizontalAdvance(itemText);
+        #else
+        int textWidth = fm.width(itemText);
+        #endif
+        if (textWidth > maxWidth) {
+            maxWidth = textWidth;
+        }
+    }
+    // 设置下拉列表的最小宽度,确保所有选项都能完整显示
+    if (maxWidth > 0) {
+        ui->portNameBox->view()->setMinimumWidth(maxWidth + 20); // 加20像素作为边距
     }
 }
 
@@ -485,6 +511,8 @@ void MainWindow::ShowPppInfoIMEI(const QString& data)
         // 显示到IMEI文本框
         ui->IMEIlineEdit->setText(imeiInfo);
         qDebug() << "最终提取的IMEI:" << imeiInfo;
+        // 尝试重命名日志文件(如果ICCID也已获取)
+        renameLogFileWithDeviceInfo();
     } else {
         if (imeiInfo.isEmpty()) {
             qDebug() << "IMEI信息为空,数据:" << data.trimmed();
@@ -543,6 +571,8 @@ void MainWindow::ShowPppInfoICCID(const QString& data)
         // 显示到ICCID文本框
         ui->ICCIDlineEdit->setText(iccidInfo);
         qDebug() << "提取的ICCID:" << iccidInfo;
+        // 尝试重命名日志文件(如果IMEI也已获取)
+        renameLogFileWithDeviceInfo();
     } else {
         qDebug() << "ICCID格式不正确,不显示到界面,ICCID:" << iccidInfo;
         ui->statusbar->showMessage("ICCID格式不正确: " + iccidInfo, 3000);
@@ -827,7 +857,7 @@ void MainWindow::parseNetworkStatChanged(const QString& data)
         qDebug() << "解析到signal值:" << signalValue;
         
         // 将signal值显示到界面
-        ui->recvTextEdit->append(QString("Network Stat Signal值: %1").arg(signalValue));
+        appendToLogFile(QString("Network Stat Signal值: %1\n").arg(signalValue));
         ui->statusbar->showMessage(QString("检测到Network Stat Signal值: %1").arg(signalValue), 2000);
         
         // 如果正在进行4G测试,处理signal值
@@ -934,8 +964,7 @@ void MainWindow::readSerialData()
 
         // 显示到接收区(如果是fac:开头的行)
         if (line.startsWith("fac:")) {
-            ui->recvTextEdit->insertPlainText(processLine);
-            ui->recvTextEdit->moveCursor(QTextCursor::End);
+            appendToLogFile(processLine);
         }
 
         // 处理所有数据提取(不管是否以fac:开头)(大小写不敏感)
@@ -951,8 +980,7 @@ void MainWindow::readSerialData()
         // 检测wstp_print格式的BTMAC和CyweeChipInfo数据(不需要fac:开头)
         if (line.contains("^^^^ BTMAC=") && line.contains("^^^^ CyweeChipInfo=")) {
             // 显示到接收区
-            ui->recvTextEdit->insertPlainText(line);
-            ui->recvTextEdit->moveCursor(QTextCursor::End);
+            appendToLogFile(line);
             
             parseWstpPrintData(line);
         }
@@ -2670,6 +2698,15 @@ QString MainWindow::saveTestRecord()
     // 显示保存成功消息
     ui->statusbar->showMessage(QString("测试记录已保存: %1").arg(csvFileName), 3000);
     
+    // 关闭测试日志文件(测试完成)
+    if (testLogFile && testLogStream) {
+        QDateTime endTime = QDateTime::currentDateTime();
+        *testLogStream << QString("=== 测试结束时间: %1 ===\n").arg(endTime.toString("yyyy-MM-dd hh:mm:ss"));
+        *testLogStream << QString("测试记录已保存: %1\n").arg(csvFileName);
+        testLogStream->flush();
+    }
+    closeTestLogFile();
+    
     // 返回文件名供外部使用
     return csvFileName;
 }
@@ -2712,7 +2749,7 @@ void MainWindow::checkSignalAndSimValues(const QString& data)
         qDebug() << "解析到signal值:" << signalValue;
         
         // 将signal值显示到界面
-        ui->recvTextEdit->append(QString("Signal值: %1").arg(signalValue));
+        appendToLogFile(QString("Signal值: %1\n").arg(signalValue));
         ui->statusbar->showMessage(QString("检测到Signal值: %1").arg(signalValue), 2000);
     } else {
         qDebug() << "未找到signal值";
@@ -2945,6 +2982,14 @@ void MainWindow::on_openButton_2_clicked()
         testTimeoutTimer->stop();
         isProductionTestRunning = false;
         currentTestStep = TEST_IDLE;
+        
+        // 关闭测试日志文件
+        if (testLogFile && testLogStream) {
+            *testLogStream << QString("=== 测试被用户停止: %1 ===\n").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+            testLogStream->flush();
+        }
+        closeTestLogFile();
+        
         ui->statusbar->showMessage("产测已停止", 2000);
         qDebug() << "产测被用户停止";
         
@@ -2969,6 +3014,9 @@ void MainWindow::on_openButton_2_clicked()
     hasReceivedSignalSim = false;
     hasReceivedPppInfo = false;
     
+    // 创建测试日志文件
+    createTestLogFile();
+    
     // 清空所有UI内容
     ui->recvTextEdit->clear();           // 清空串口接收文本框
     ui->sendTextEdit->clear();           // 清空发送文本框
@@ -3986,7 +4034,7 @@ void MainWindow::checkCat1SignalResult(const QString& data)
         qDebug() << "CAT1信号测试解析到signal值:" << signalValue << ",接收次数:" << cat1SignalReceivedCount << "/5";
         
         // 将CAT1 signal值显示到界面
-        ui->recvTextEdit->append(QString("CAT1 Signal值: %1 (%2/5)").arg(signalValue).arg(cat1SignalReceivedCount));
+        appendToLogFile(QString("CAT1 Signal值: %1 (%2/5)\n").arg(signalValue).arg(cat1SignalReceivedCount));
         
         // 统计信号值(用于计算平均值)
         if (signalValue == 99) {
@@ -4223,8 +4271,7 @@ void MainWindow::check4GSignalResult(const QString& data)
         QString rsrqGrade = getRsrqGrade(currentRsrq);
         QString rsrqOutput = QString("RSRQ: %1 (%2 dB:%3)").arg(rsrqRaw).arg(currentRsrq).arg(rsrqGrade);
         qDebug() << rsrqOutput;
-        ui->recvTextEdit->insertPlainText(rsrqOutput + "\n");
-        ui->recvTextEdit->moveCursor(QTextCursor::End);
+        appendToLogFile(rsrqOutput + "\n");
         return; // 每行单独处理
     }
     
@@ -4240,8 +4287,7 @@ void MainWindow::check4GSignalResult(const QString& data)
         QString rsrpGrade = getRsrpGrade(currentRsrp);
         QString rsrpOutput = QString("RSRP: %1 (%2 dBm:%3)").arg(rsrpRaw).arg(currentRsrp).arg(rsrpGrade);
         qDebug() << rsrpOutput;
-        ui->recvTextEdit->insertPlainText(rsrpOutput + "\n");
-        ui->recvTextEdit->moveCursor(QTextCursor::End);
+        appendToLogFile(rsrpOutput + "\n");
         return; // 每行单独处理
     }
     
@@ -4272,8 +4318,7 @@ void MainWindow::check4GSignalResult(const QString& data)
         QString overallAssessment = getOverallSignalAssessment(currentRsrp, currentRsrq);
         QString overallOutput = QString("总体评级:%1").arg(overallAssessment);
         qDebug() << overallOutput;
-        ui->recvTextEdit->insertPlainText(overallOutput + "\n");
-        ui->recvTextEdit->moveCursor(QTextCursor::End);
+        appendToLogFile(overallOutput + "\n");
         
         // 检查信号质量是否良好以上
         bool rsrpGood = data.contains("覆盖极好") || data.contains("覆盖良好") || 
@@ -5036,3 +5081,165 @@ void MainWindow::on_openButton_4_clicked()
 {
     serial->write("AT^FACTORY=3\r\n");
 }
+
+// 创建测试日志文件
+void MainWindow::createTestLogFile()
+{
+    // 如果日志文件已打开,先关闭
+    closeTestLogFile();
+    
+    // 获取当前时间
+    QDateTime now = QDateTime::currentDateTime();
+    
+    // 获取IMEI和ICCID(可能还没有,使用"未知"作为占位符)
+    QString imei = ui->IMEIlineEdit->text().trimmed();
+    QString iccid = ui->ICCIDlineEdit->text().trimmed();
+    
+    if (imei.isEmpty()) {
+        imei = "未知";
+    }
+    if (iccid.isEmpty()) {
+        iccid = "未知";
+    }
+    
+    // 创建日志目录(在CSV记录目录下的logs子目录)
+    QString appPath = QCoreApplication::applicationDirPath();
+    QString logsDir = appPath + "/产测记录/logs";
+    QDir dir;
+    if (!dir.exists(logsDir)) {
+        dir.mkpath(logsDir);
+    }
+    
+    // 生成文件名:yyyymmdd_hhmmss_imei_iccid.log
+    QString fileName = QString("%1_%2_%3_%4.log")
+                       .arg(now.toString("yyyyMMdd"))
+                       .arg(now.toString("hhmmss"))
+                       .arg(imei)
+                       .arg(iccid);
+    
+    testLogFilePath = logsDir + "/" + fileName;
+    
+    // 创建并打开日志文件
+    testLogFile = new QFile(testLogFilePath);
+    if (!testLogFile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
+        qDebug() << "无法创建日志文件:" << testLogFilePath << "错误:" << testLogFile->errorString();
+        delete testLogFile;
+        testLogFile = nullptr;
+        return;
+    }
+    
+    testLogStream = new QTextStream(testLogFile);
+    testLogStream->setCodec("UTF-8");
+    
+    // 写入日志文件头
+    *testLogStream << QString("=== 测试开始时间: %1 ===\n").arg(now.toString("yyyy-MM-dd hh:mm:ss"));
+    *testLogStream << QString("IMEI: %1\n").arg(imei);
+    *testLogStream << QString("ICCID: %1\n").arg(iccid);
+    *testLogStream << "========================================\n";
+    testLogStream->flush();
+    
+    qDebug() << "测试日志文件已创建:" << testLogFilePath;
+}
+
+// 追加内容到日志文件(同时显示到recvTextEdit)
+void MainWindow::appendToLogFile(const QString& text)
+{
+    // 显示到recvTextEdit
+    ui->recvTextEdit->insertPlainText(text);
+    ui->recvTextEdit->moveCursor(QTextCursor::End);
+    
+    // 如果日志文件已打开,写入日志文件
+    if (testLogFile && testLogStream && testLogFile->isOpen()) {
+        *testLogStream << text;
+        testLogStream->flush();
+    }
+}
+
+// 关闭测试日志文件
+void MainWindow::closeTestLogFile()
+{
+    if (testLogStream) {
+        delete testLogStream;
+        testLogStream = nullptr;
+    }
+    
+    if (testLogFile) {
+        if (testLogFile->isOpen()) {
+            testLogFile->close();
+        }
+        delete testLogFile;
+        testLogFile = nullptr;
+    }
+    
+    testLogFilePath = "";
+}
+
+// 使用设备信息重命名日志文件
+void MainWindow::renameLogFileWithDeviceInfo()
+{
+    // 如果日志文件未打开或路径为空,不处理
+    if (!testLogFile || testLogFilePath.isEmpty()) {
+        return;
+    }
+    
+    // 获取IMEI和ICCID
+    QString imei = ui->IMEIlineEdit->text().trimmed();
+    QString iccid = ui->ICCIDlineEdit->text().trimmed();
+    
+    // 如果IMEI和ICCID都还是"未知"或为空,不重命名
+    if (imei.isEmpty() || imei == "未知" || iccid.isEmpty() || iccid == "未知") {
+        return;
+    }
+    
+    // 从当前文件名中提取时间部分
+    QFileInfo fileInfo(testLogFilePath);
+    QString baseName = fileInfo.baseName();
+    QStringList parts = baseName.split("_");
+    
+    if (parts.size() >= 2) {
+        QString datePart = parts[0];  // yyyymmdd
+        QString timePart = parts[1];  // hhmmss
+        
+        // 生成新文件名
+        QString newFileName = QString("%1_%2_%3_%4.log")
+                             .arg(datePart)
+                             .arg(timePart)
+                             .arg(imei)
+                             .arg(iccid);
+        
+        QString newFilePath = fileInfo.absolutePath() + "/" + newFileName;
+        
+        // 如果新文件名与当前文件名不同,重命名
+        if (newFilePath != testLogFilePath) {
+            // 先关闭文件
+            if (testLogFile->isOpen()) {
+                testLogFile->close();
+            }
+            
+            // 重命名文件
+            QFile oldFile(testLogFilePath);
+            if (oldFile.rename(newFilePath)) {
+                testLogFilePath = newFilePath;
+                qDebug() << "日志文件已重命名:" << newFilePath;
+                
+                // 重新打开文件(追加模式)
+                if (testLogFile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
+                    testLogStream = new QTextStream(testLogFile);
+                    testLogStream->setCodec("UTF-8");
+                } else {
+                    qDebug() << "重命名后无法重新打开日志文件:" << newFilePath;
+                    delete testLogFile;
+                    testLogFile = nullptr;
+                    testLogStream = nullptr;
+                }
+            } else {
+                qDebug() << "无法重命名日志文件:" << oldFile.errorString();
+                // 重新打开原文件
+                if (testLogFile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
+                    testLogStream = new QTextStream(testLogFile);
+                    testLogStream->setCodec("UTF-8");
+                }
+            }
+        }
+    }
+}
index 44e904d..df94d91 100644 (file)
@@ -17,6 +17,8 @@
 #include <QVBoxLayout>
 #include <QLabel>
 #include <QSet>
+#include <QFile>
+#include <QTextStream>
 
 QT_BEGIN_NAMESPACE
 namespace Ui { class MainWindow; }
@@ -90,6 +92,11 @@ private slots:
     void updateTestStatus(const QString& testName, TestStatus status);
     void updateOverallStatus();
     QString saveTestRecord(); // 保存测试记录到Excel(静默保存)
+    // 日志记录相关函数
+    void createTestLogFile(); // 创建测试日志文件
+    void appendToLogFile(const QString& text); // 追加内容到日志文件(同时显示到recvTextEdit)
+    void closeTestLogFile(); // 关闭测试日志文件
+    void renameLogFileWithDeviceInfo(); // 使用设备信息重命名日志文件
     void checkSignalAndSimValues(const QString& data); // 检查signal和sim值进行4G测试判断
     void on_openButton_4_clicked();
 
@@ -167,6 +174,10 @@ private:
     bool bluetoothTestFinished;         // 蓝牙测试是否已完成(成功或失败)
     QString detectedBluetoothAddress;   // 检测到的指定蓝牙地址
     int detectedBluetoothRSSI;          // 检测到的指定蓝牙地址的RSSI值
+    // 日志文件相关变量
+    QFile *testLogFile;                 // 测试日志文件对象
+    QTextStream *testLogStream;         // 测试日志文件流
+    QString testLogFilePath;            // 测试日志文件路径
     
     enum AudioTestStep {
         AUDIO_STARTING_RECORD,  // 开始录音
index 6b2243e..b0ecb5e 100644 (file)
   </property>
   <property name="font">
    <font>
-    <pointsize>10</pointsize>
+    <pointsize>14</pointsize>
    </font>
   </property>
   <property name="windowTitle">
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <widget class="QComboBox" name="portNameBox">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>30</y>
-      <width>231</width>
-      <height>31</height>
-     </rect>
+   <layout class="QHBoxLayout" name="mainLayout">
+    <property name="spacing">
+     <number>6</number>
     </property>
-   </widget>
-   <widget class="QTextEdit" name="recvTextEdit">
-    <property name="geometry">
-     <rect>
-      <x>260</x>
-      <y>20</y>
-      <width>741</width>
-      <height>401</height>
-     </rect>
+    <property name="leftMargin">
+     <number>6</number>
     </property>
-   </widget>
-   <widget class="QTextEdit" name="sendTextEdit">
-    <property name="geometry">
-     <rect>
-      <x>260</x>
-      <y>460</y>
-      <width>741</width>
-      <height>71</height>
-     </rect>
+    <property name="topMargin">
+     <number>6</number>
     </property>
-   </widget>
-   <widget class="QPushButton" name="openButton">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>90</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
+    <property name="rightMargin">
+     <number>6</number>
     </property>
-    <property name="text">
-     <string>打开串口</string>
+    <property name="bottomMargin">
+     <number>6</number>
     </property>
-   </widget>
-   <widget class="QPushButton" name="clearRecvButton">
-    <property name="geometry">
-     <rect>
-      <x>120</x>
-      <y>90</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>清空数据</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="sendButton">
-    <property name="geometry">
-     <rect>
-      <x>930</x>
-      <y>540</y>
-      <width>75</width>
-      <height>23</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>发送</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="Verlabel">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>30</y>
-      <width>21</width>
-      <height>16</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Ver:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="VerlineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1050</x>
-      <y>30</y>
-      <width>181</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLabel" name="Verlabel_2">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>60</y>
-      <width>31</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>IMEI:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="IMEIlineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1050</x>
-      <y>60</y>
-      <width>181</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLabel" name="Verlabel_3">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>90</y>
-      <width>41</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>ICCID</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="ICCIDlineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1050</x>
-      <y>90</y>
-      <width>181</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="ModemVerlineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1050</x>
-      <y>120</y>
-      <width>251</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLabel" name="Verlabel_4">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>120</y>
-      <width>41</width>
-      <height>21</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Modem:</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="openButton_2">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>160</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>开始产测</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="openRecordsFolderButton">
-    <property name="geometry">
-     <rect>
-      <x>120</x>
-      <y>160</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="styleSheet">
-     <string>QPushButton { 
-background-color: #FF9800; 
+    <item>
+     <widget class="QWidget" name="leftPanel">
+      <property name="maximumSize">
+       <size>
+        <width>280</width>
+        <height>16777215</height>
+       </size>
+      </property>
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <layout class="QVBoxLayout" name="leftLayout">
+       <property name="spacing">
+        <number>6</number>
+       </property>
+      <item>
+       <widget class="QComboBox" name="portNameBox">
+        <property name="font">
+         <font>
+          <family>Arial</family>
+          <pointsize>14</pointsize>
+         </font>
+        </property>
+        <property name="sizeAdjustPolicy">
+         <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QGridLayout" name="buttonGridLayout">
+        <property name="spacing">
+         <number>6</number>
+        </property>
+        <item row="2" column="0">
+         <widget class="QPushButton" name="openButton_2">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>开始产测</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="0">
+         <widget class="QPushButton" name="openButton">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>打开串口</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QPushButton" name="agingTestButton_2">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+            <weight>75</weight>
+            <bold>true</bold>
+           </font>
+          </property>
+          <property name="styleSheet">
+           <string>QPushButton { 
+background-color: #9C27B0; 
 color: white; 
 border-radius: 4px; 
 font-weight: bold; 
 }
 QPushButton:hover { 
-background-color: #F57C00; 
+background-color: #7B1FA2; 
 }</string>
-    </property>
-    <property name="text">
-     <string>打开记录</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="agingTestButton">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>220</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="styleSheet">
-     <string>QPushButton { 
+          </property>
+          <property name="text">
+           <string>恢复出厂</string>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="0">
+         <widget class="QPushButton" name="agingTestButton">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+            <weight>75</weight>
+            <bold>true</bold>
+           </font>
+          </property>
+          <property name="styleSheet">
+           <string>QPushButton { 
 background-color: #9C27B0; 
 color: white; 
 border-radius: 4px; 
@@ -236,669 +143,869 @@ font-weight: bold;
 QPushButton:hover { 
 background-color: #7B1FA2; 
 }</string>
-    </property>
-    <property name="text">
-     <string>老化测试</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="ExpectedVerLabel">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>180</y>
-      <width>61</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>最新VER:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="expectedVerLineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1070</x>
-      <y>180</y>
-      <width>231</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLabel" name="ExpectedModemLabel">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>210</y>
-      <width>81</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>最新MODEM:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="expectedModemVerLineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1090</x>
-      <y>210</y>
-      <width>231</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QGroupBox" name="testStatusGroupBox">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>330</y>
-      <width>261</width>
-      <height>271</height>
-     </rect>
-    </property>
-    <property name="title">
-     <string>产测状态</string>
-    </property>
-    <widget class="QLabel" name="lcdTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>25</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>LCD测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="lcdStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>25</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="lcdStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>25</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="motorTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>55</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>马达测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="motorStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>55</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="motorStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>55</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="keyTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>85</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>按键测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="keyStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>85</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="keyStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>85</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="audioTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>115</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>录音测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="audioStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>115</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="audioStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>115</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="batteryTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>145</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>电池测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="batteryStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>145</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="batteryStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>145</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gsensorTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>175</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>G-sensor:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gsensorStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>175</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gsensorStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>175</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="bluetoothTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>205</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>蓝牙测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="bluetoothStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>205</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="bluetoothStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>205</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pppTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>235</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>4G测试:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pppStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>235</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pppStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>235</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>未测试</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="overallTestLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>265</y>
-       <width>60</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>整体状态:</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="overallStatusIcon">
-     <property name="geometry">
-      <rect>
-       <x>80</x>
-       <y>265</y>
-       <width>20</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888; font-size: 18px; font-weight: bold;</string>
-     </property>
-     <property name="text">
-      <string>○</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-    <widget class="QLabel" name="overallStatusText">
-     <property name="geometry">
-      <rect>
-       <x>110</x>
-       <y>265</y>
-       <width>80</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="styleSheet">
-      <string>color: #888888;</string>
-     </property>
-     <property name="text">
-      <string>等待开始</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QPushButton" name="agingTestButton_2">
-    <property name="geometry">
-     <rect>
-      <x>120</x>
-      <y>220</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="styleSheet">
-     <string>QPushButton { 
-background-color: #9C27B0; 
+          </property>
+          <property name="text">
+           <string>老化测试</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QPushButton" name="clearRecvButton">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>清空数据</string>
+          </property>
+         </widget>
+        </item>
+        <item row="6" column="0">
+         <widget class="QPushButton" name="openButton_3">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="text">
+           <string>老化结果</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="0">
+         <widget class="QPushButton" name="openRecordsFolderButton">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+            <weight>75</weight>
+            <bold>true</bold>
+           </font>
+          </property>
+          <property name="styleSheet">
+           <string>QPushButton { 
+background-color: #FF9800; 
 color: white; 
 border-radius: 4px; 
 font-weight: bold; 
 }
 QPushButton:hover { 
-background-color: #7B1FA2; 
+background-color: #F57C00; 
 }</string>
-    </property>
-    <property name="text">
-     <string>恢复出厂</string>
-    </property>
-   </widget>
-   <widget class="QPushButton" name="openButton_3">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>280</y>
-      <width>101</width>
-      <height>51</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>老化结果</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="PYVerlineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1050</x>
-      <y>150</y>
-      <width>251</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string/>
-    </property>
-   </widget>
-   <widget class="QLabel" name="Verlabel_5">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>150</y>
-      <width>41</width>
-      <height>21</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>PYVER</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="ExpectedModemLabel_2">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>240</y>
-      <width>81</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>最新PY:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="expectedPYVerLineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1090</x>
-      <y>240</y>
-      <width>231</width>
-      <height>20</height>
-     </rect>
-    </property>
-   </widget>
-   <widget class="QLabel" name="BluetoothAddressLabel">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>270</y>
-      <width>71</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>蓝牙地址:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="bluetoothAddressLineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1090</x>
-      <y>270</y>
-      <width>231</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="placeholderText">
-     <string>例如: 1C:1D:2B:68:82:68</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="BluetoothRSSILabel">
-    <property name="geometry">
-     <rect>
-      <x>1010</x>
-      <y>300</y>
-      <width>71</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>RSSI阈值:</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="bluetoothRSSILineEdit">
-    <property name="geometry">
-     <rect>
-      <x>1090</x>
-      <y>300</y>
-      <width>231</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="placeholderText">
-     <string>例如: -80</string>
-    </property>
-   </widget>
-   <widget class="QLineEdit" name="audioVolumeLineEdit">
-    <property name="geometry">
-     <rect>
-      <x>110</x>
-      <y>360</y>
-      <width>101</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>2</string>
-    </property>
-    <property name="placeholderText">
-     <string>例如: 2</string>
-    </property>
-   </widget>
-   <widget class="QLabel" name="AudioVolumeLabel">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>360</y>
-      <width>121</width>
-      <height>20</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>音频测试音量:</string>
-    </property>
-   </widget>
+          </property>
+          <property name="text">
+           <string>打开记录</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="audioVolumeLayout">
+        <property name="spacing">
+         <number>6</number>
+        </property>
+        <item>
+         <widget class="QLabel" name="AudioVolumeLabel">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="text">
+           <string>音频测试音量</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="audioVolumeLineEdit">
+          <property name="font">
+           <font>
+            <family>Agra</family>
+            <pointsize>14</pointsize>
+           </font>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+          <property name="text">
+           <string>2</string>
+          </property>
+          <property name="placeholderText">
+           <string>例如: 2</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <spacer name="leftSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>40</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+      </widget>
+    </item>
+    <item>
+     <widget class="QWidget" name="centerPanel">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>5</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <layout class="QVBoxLayout" name="centerLayout">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item>
+       <widget class="QTextEdit" name="recvTextEdit">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>1</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="sendLayout">
+        <property name="spacing">
+         <number>6</number>
+        </property>
+        <item>
+         <widget class="QTextEdit" name="sendTextEdit">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>71</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>16777215</width>
+            <height>100</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QPushButton" name="sendButton">
+          <property name="text">
+           <string>发送</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+       </layout>
+      </widget>
+     </item>
+    <item>
+     <widget class="QWidget" name="rightPanel">
+      <property name="minimumSize">
+       <size>
+        <width>380</width>
+        <height>0</height>
+       </size>
+      </property>
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>2</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <layout class="QVBoxLayout" name="rightLayout">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <item>
+       <layout class="QFormLayout" name="versionFormLayout">
+        <property name="horizontalSpacing">
+         <number>6</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>4</number>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="Verlabel">
+          <property name="text">
+           <string>Ver:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="VerlineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="Verlabel_2">
+          <property name="text">
+           <string>IMEI:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLineEdit" name="IMEIlineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="Verlabel_3">
+          <property name="text">
+           <string>ICCID</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QLineEdit" name="ICCIDlineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QLabel" name="Verlabel_4">
+          <property name="text">
+           <string>Modem:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1">
+         <widget class="QLineEdit" name="ModemVerlineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QLabel" name="Verlabel_5">
+          <property name="text">
+           <string>PYVER</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="1">
+         <widget class="QLineEdit" name="PYVerlineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="0">
+         <widget class="QLabel" name="ExpectedVerLabel">
+          <property name="text">
+           <string>最新VER:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="5" column="1">
+         <widget class="QLineEdit" name="expectedVerLineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="6" column="0">
+         <widget class="QLabel" name="ExpectedModemLabel">
+          <property name="text">
+           <string>最新MODEM:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="6" column="1">
+         <widget class="QLineEdit" name="expectedModemVerLineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="0">
+         <widget class="QLabel" name="ExpectedModemLabel_2">
+          <property name="text">
+           <string>最新PY:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="7" column="1">
+         <widget class="QLineEdit" name="expectedPYVerLineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="0">
+         <widget class="QLabel" name="BluetoothAddressLabel">
+          <property name="text">
+           <string>蓝牙地址:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="8" column="1">
+         <widget class="QLineEdit" name="bluetoothAddressLineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+          <property name="placeholderText">
+           <string>例如: 1C:1D:2B:68:82:68</string>
+          </property>
+         </widget>
+        </item>
+        <item row="9" column="0">
+         <widget class="QLabel" name="BluetoothRSSILabel">
+          <property name="text">
+           <string>RSSI阈值:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="9" column="1">
+         <widget class="QLineEdit" name="bluetoothRSSILineEdit">
+          <property name="alignment">
+           <set>Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+          <property name="placeholderText">
+           <string>例如: -80</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <widget class="QScrollArea" name="testStatusScrollArea">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>1</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="widgetResizable">
+         <bool>true</bool>
+        </property>
+        <widget class="QGroupBox" name="testStatusGroupBox">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>0</y>
+           <width>424</width>
+           <height>318</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>产测状态</string>
+         </property>
+         <layout class="QVBoxLayout" name="testStatusLayout">
+          <property name="spacing">
+           <number>4</number>
+          </property>
+          <property name="leftMargin">
+           <number>11</number>
+          </property>
+          <property name="topMargin">
+           <number>11</number>
+          </property>
+          <property name="rightMargin">
+           <number>11</number>
+          </property>
+          <property name="bottomMargin">
+           <number>15</number>
+          </property>
+          <item>
+           <layout class="QHBoxLayout" name="lcdTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="lcdTestLabel">
+              <property name="text">
+               <string>LCD测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="lcdStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="lcdStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="lcdSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="motorTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="motorTestLabel">
+              <property name="text">
+               <string>马达测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="motorStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="motorStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="motorSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="keyTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="keyTestLabel">
+              <property name="text">
+               <string>按键测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="keyStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="keyStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="keySpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="audioTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="audioTestLabel">
+              <property name="text">
+               <string>录音测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="audioStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="audioStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="audioSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="batteryTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="batteryTestLabel">
+              <property name="text">
+               <string>电池测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="batteryStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="batteryStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="batterySpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="gsensorTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="gsensorTestLabel">
+              <property name="text">
+               <string>G-sensor:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="gsensorStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="gsensorStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="gsensorSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="bluetoothTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="bluetoothTestLabel">
+              <property name="text">
+               <string>蓝牙测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="bluetoothStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="bluetoothStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="bluetoothSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="pppTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="pppTestLabel">
+              <property name="text">
+               <string>4G测试:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="pppStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="pppStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>未测试</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="pppSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="overallTestLayout">
+            <property name="spacing">
+             <number>4</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="overallTestLabel">
+              <property name="text">
+               <string>整体状态:</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="overallStatusIcon">
+              <property name="styleSheet">
+               <string>color: #888888; font-size: 18px; font-weight: bold;</string>
+              </property>
+              <property name="text">
+               <string>○</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignCenter</set>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QLabel" name="overallStatusText">
+              <property name="styleSheet">
+               <string>color: #888888;</string>
+              </property>
+              <property name="text">
+               <string>等待开始</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="overallSpacer">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="testStatusBottomSpacer">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>10</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+     </layout>
+      </widget>
+    </item>
+   </layout>
   </widget>
   <widget class="QMenuBar" name="menubar">
    <property name="geometry">
@@ -906,7 +1013,7 @@ background-color: #7B1FA2;
      <x>0</x>
      <y>0</y>
      <width>1309</width>
-     <height>23</height>
+     <height>21</height>
     </rect>
    </property>
   </widget>