完整工程文件详见uart: Qt制作串口调试助手
使用Qt5.12制作串口调试助手,实现功能如下图展示
相关设计逻辑及代码展示
- 串口调试助手首先是要对串口进行相关设置
private:
Ui::Widget *ui;// ui对象指针,用于访问界面元素
QSerialPort mSerialPort;
QString mPortName; // 端口号
QString mPortBaudrate; // 波特率
QString mPortParity; // 校验位
QString mPortDatabits; // 数据位
QString mPortStopbits; // 停止位
bool Widget::getSerialPortConfig()
{
//获取串口配置
mPortName = ui->Box_COM->currentText();
mPortBaudrate = ui->Box_baud->currentText();
mPortParity = ui->Box_parity->currentText();
mPortDatabits = ui->Box_databits->currentText();
mPortStopbits = ui->Box_stopbits->currentText();
/*设置串口配置*/
mSerialPort.setPortName(mPortName); // 端口号
mSerialPort.setBaudRate(mPortBaudrate.toInt());// 波特率
// 校验位
if("Even"==mPortParity)
{
mSerialPort.setParity(QSerialPort::EvenParity);
}else if("Odd"==mPortParity)
{
mSerialPort.setParity(QSerialPort::OddParity);
}else
{
mSerialPort.setParity(QSerialPort::NoParity);
}
// 数据位
if("5"==mPortDatabits)
{
mSerialPort.setDataBits(QSerialPort::Data5);
}else if("6"==mPortDatabits)
{
mSerialPort.setDataBits(QSerialPort::Data6);
}else if("7"==mPortDatabits)
{
mSerialPort.setDataBits(QSerialPort::Data7);
}else
{
mSerialPort.setDataBits(QSerialPort::Data8);
}
// 停止位
if("2"==mPortStopbits)
{
mSerialPort.setStopBits(QSerialPort::TwoStop);
}else if("1.5"==mPortStopbits)
{
mSerialPort.setStopBits(QSerialPort::OneAndHalfStop);
}else
{
mSerialPort.setStopBits(QSerialPort::OneStop);
}
return mSerialPort.open(QSerialPort::ReadWrite);;
}
void Widget::on_Button_uart_clicked()
{
if(this->ui->Button_uart->text() == "打开串口")
{
if(true == getSerialPortConfig())
{
qDebug() << "串口打开成功!";
rec_flag = 1;
this->ui->Button_uart->setText("关闭串口");
/*串口开启禁止修改配置*/
this->ui->Box_COM->setEnabled(false);
this->ui->Box_baud->setEnabled(false);
this->ui->Box_parity->setEnabled(false);
this->ui->Box_databits->setEnabled(false);
this->ui->Box_stopbits->setEnabled(false);
/*相关功能使能*/
this->ui->Button_tranmit->setEnabled(true);
this->ui->Button_stop->setEnabled(true);
this->ui->checkBox_timeout->setEnabled(true);// 定时发送复选框使能能
this->ui->checkBox_lines->setEnabled(true); // 多行循环发送复选框使能
this->ui->Button_line1->setEnabled(true); // 单条数据发送功能使能
this->ui->Button_line2->setEnabled(true); // 单条数据发送功能使能
this->ui->Button_line3->setEnabled(true); // 单条数据发送功能使能
}else
{
//QMessageBox::critical(NULL, "提示", "串口打开失败");
QMessageBox::information(this,"提示","串口打开失败,请检查配置");
}
}
else
{
mSerialPort.close();
qDebug() << "串口关闭!";
rec_flag = 0;
this->ui->Button_uar