1. MainWindow 类概述
MainWindow 是一个基于 Qt 框架的串口通信工具主窗口类,集成了串口通信、数据可视化、日志记录等功能。这个类继承自 QMainWindow,是 Qt 应用程序的主窗口实现。
1.1 核心功能解析
MainWindow 主要提供以下功能模块:
-
串口通信功能:
- 串口打开/关闭
- 数据发送/接收
- 波特率、数据位等参数配置
- 自动重连机制
-
数据可视化:
- 实时波形绘制
- FFT 频谱分析
- 交互式十字光标
-
辅助功能:
- 日志记录
- 主题切换(深色/浅色)
- 字体大小调整
- 窗口置顶
1.2 类成员变量解析
cpp复制private:
Ui::MainWindow *ui; // UI 界面指针
// 串口相关
QSerialPort *serialPort; // 串口对象指针
long sendNum, recvNum, old_recvNum; // 发送/接收字节计数
QString status; // 串口状态字符串
// 状态栏标签
QLabel *lblSendNum;
QLabel *lblRecvNum;
QLabel *lblPortState;
// 日志相关
QFile logFile;
bool isFileMode = false;
QTimer updateTimer;
// 绘图相关
QCPItemStraightLine *hLine = nullptr; // 水平十字线
QCPItemStraightLine *vLine = nullptr; // 垂直十字线
QCPItemText *dataLabel = nullptr; // 数据标签
bool isMouseInPlot = false;
// 颜色列表(支持最多16个波形)
QVector<QColor> colors = {
Qt::blue, Qt::red, Qt::green, /*...省略其他颜色...*/
};
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 串口通信实现详解
2.1 串口初始化与配置
串口初始化主要在构造函数中完成:
cpp复制MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
// ...其他初始化代码...
serialPort = new QSerialPort(this);
serialPort->setReadBufferSize(512); // 设置512字节的接收缓冲区
// 连接信号槽
connect(serialPort, SIGNAL(readyRead()),
this, SLOT(manual_serialPortReadyRead()));
// 错误处理
connect(serialPort, &QSerialPort::errorOccurred, this,
[this](QSerialPort::SerialPortError error){
if (error == QSerialPort::ResourceError ||
error == QSerialPort::PermissionError) {
open_uart = 2; // 标记需要重连
serialPort->close();
}
});
}
2.2 串口打开与关闭
on_openBt_clicked() 槽函数处理串口的打开/关闭:
cpp复制void MainWindow::on_openBt_clicked()
{
if(ui->openBt->text() == "打开串口") {
// 获取串口参数
QString portName = /*从UI获取串口名称*/;
int baudRate = /*从UI获取波特率*/;
// ...其他参数获取...
// 配置串口
serialPort->setPortName(portName);
