瀏覽代碼

实现串口连接按钮的功能

master
ZTZHANG\ztzhang 2 週之前
父節點
當前提交
10eacb1558
共有 2 個文件被更改,包括 63 次插入12 次删除
  1. +5
    -2
      Modbus/include/modbus.h
  2. +58
    -10
      Modbus/src/modbus.cpp

+ 5
- 2
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;


+ 58
- 10
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");
}
}

Loading…
取消
儲存