#ifndef MAINWINDOW_H #define MAINWINDOW_H #include "clickablecombobox.h" #include //#include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); ClickableComboBox *portComboBox; private slots: void on_openButton_clicked(); void on_closeButton_clicked(); void on_sendButton_clicked(); void on_clearSendButton_clicked(); void on_clearReceiveButton_clicked(); void on_clearDecimalButton_clicked(); void readData(); void on_saveButton_clicked(); void on_timerButton_clicked(); void timer_Event(); void on_realTimeSaveCheckBox_stateChanged(int state); void openConfigDir(); // 打开配置文件目录 void openRealTimeSaveDir(); // 打开实时保存目录 void parseBeidouData(const QString& beidouData); void parseTxxxData(const QString& payload); QString hexToAscii(const QString& hexStr); void processHexTxxxFrames(); void processHexBdtxrFrames(); private: Ui::MainWindow *ui; QSerialPort *serial; QTimer *timer; void updatePortList(); void updateBaudRateList(); void saveRealTimeData(const QString &data); // 单参数版本,ID从行尾提取 QFile realTimeFile; int txCount; // S int rxCount; // R QLabel *txLabel; // 发送计数的标签 QLabel *rxLabel; // 接收计数的标签 QByteArray dataBuffer; void readConfig(); // 用于读取配置文件 QString defaultFilePath; // 保存默认文件路径 void generateFileName(); QSystemTrayIcon *trayIcon; // 托盘图标 void closeEvent(QCloseEvent *event) override; QMap realTimeFiles; QByteArray receiveBuffer; // 解析缓冲(原始字节) QByteArray displayBuffer; // 接收区显示缓冲(文本模式) QString hexParseBuffer; // 十六进制解析缓冲(空格分隔的大写HEX) QMap recordCounts; // 存储每个ID的记录计数 void initializeRecordCounts(); // 初始化记录计数函数 int getLastRecordFromFile(const QString &filePath); // 读取文件最后一条RECORD值 // 日志相关 QFile *logFile; // 日志文件 void initializeLogFile(); // 初始化日志文件 void writeLog(const QString &message); // 写入日志 QString logDirPath; // 日志目录(来自 config.ini 的 [Log]/defaultPath) }; #endif // MAINWINDOW_H