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