From 10eacb1558212416c07f9df670e07a94361abe3c Mon Sep 17 00:00:00 2001 From: "ZTZHANG\\ztzhang" Date: Fri, 25 Jul 2025 14:42:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=B2=E5=8F=A3=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=8C=89=E9=92=AE=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modbus/include/modbus.h | 7 +++-- Modbus/src/modbus.cpp | 68 +++++++++++++++++++++++++++++++++++------ 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/Modbus/include/modbus.h b/Modbus/include/modbus.h index 6a6e681..677281f 100644 --- a/Modbus/include/modbus.h +++ b/Modbus/include/modbus.h @@ -18,13 +18,16 @@ class Modbus : public QMainWindow public: Modbus(QWidget *parent = nullptr); ~Modbus(); - + // 创建串口对象指针 + QSerialPort* serial; + // 获取可用串口列表 QStringList get_avail_serialport(); public slots: // 显示可用串口 void init_serialport_client(); - + // 使用按钮打开串口 + void serial_button_clicked(); private: Ui::ModbusClass *ui; diff --git a/Modbus/src/modbus.cpp b/Modbus/src/modbus.cpp index 45e92b4..0e60d53 100644 --- a/Modbus/src/modbus.cpp +++ b/Modbus/src/modbus.cpp @@ -5,14 +5,33 @@ Modbus::Modbus(QWidget *parent) , ui(new Ui::ModbusClass()) { ui->setupUi(this); + + // 初始化串口指针 + serial = new QSerialPort(this); + // 下拉框显示串口 init_serialport_client(); + // 连接按钮信号 + connect( + ui->serialOpenButton, + &QPushButton::clicked, + this, + &Modbus::serial_button_clicked + ); } Modbus::~Modbus() { + // 删除串口指针 + if (serial->isOpen()) + { + serial->close(); + } + delete serial; + delete ui; } + // 实现下拉框显示串口 void Modbus::init_serialport_client() { @@ -23,20 +42,49 @@ void Modbus::init_serialport_client() QStringList Modbus::get_avail_serialport() { // 下拉框串口 - QStringList list_avail_serialport; + QStringList listAvailSerialPort; // 遍历可用串口 - foreach(const QSerialPortInfo & info, QSerialPortInfo::availablePorts()) + foreach(const QSerialPortInfo& info, QSerialPortInfo::availablePorts()) { - // 串口 - QSerialPort serial; - serial.setPort(info); - // 显示串口名 - if (serial.open(QIODevice::ReadWrite)) + serial->setPort(info); + // 使用ReadWrite模式打开串口成功,则加入列表 + if (serial->open(QIODevice::ReadWrite)) { - list_avail_serialport.append(serial.portName()); - serial.close(); + listAvailSerialPort.append(serial->portName()); + serial->close(); } } - return list_avail_serialport; + return listAvailSerialPort; } + +// 使用按钮打开串口 +void Modbus::serial_button_clicked() +{ + // 获取选中的串口号 + QString portSelected = ui->serialBox->currentText(); + + // 判断是否打开 + if (serial->isOpen()) + { + serial->close(); + } + + // 配置串口参数 + serial->setPortName(portSelected); + serial->setBaudRate(QSerialPort::Baud9600); + serial->setDataBits(QSerialPort::Data8); + serial->setParity(QSerialPort::EvenParity); + serial->setStopBits(QSerialPort::OneStop); + serial->setFlowControl(QSerialPort::NoFlowControl); + + // 尝试打开串口 + if (serial->open(QIODevice::ReadWrite)) + { + ui->serialLogLabel->setText("Success"); + } + else + { + ui->serialLogLabel->setText("Failure"); + } +} \ No newline at end of file