

在.pro文件添加 serialport
QT += core gui serialport
dialog.h
#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include <QSerialPort>namespace Ui {class Dialog;}class Dialog : public QDialog{Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();bool mIsOpen = false; // 判断串口是否连接成功bool getSerialPortConfig(); // 打开串口函数private slots:void on_buttonOpenClear_clicked();void on_buttonSend_clicked();// 读取文件槽函数void on_SerialPort_readyRead();private:Ui::Dialog *ui;QSerialPort mSerialPort; // 串口变量};#endif // DIALOG_H
dialog.cpp
#include "dialog.h"#include "ui_dialog.h"#include <QDebug>#include <QSerialPortInfo>#include <QSerialPort>Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog){ui->setupUi(this);this->setWindowTitle("串口调试");// 智能识别当前系统的有效串口号QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts();int count = serialPortInfo.count();for(int i = 0; i<count; i++){// serialPortInfo.at(i).portName() 获取端口号// serialPortInfo.at(i).description() 获取端口号描述QString comStr = QString("%1 %2").arg(serialPortInfo.at(i).portName()).arg(serialPortInfo.at(i).description());ui->comPortName->addItem(comStr);}// 波特率ui->comBaudRate->addItem("110");ui->comBaudRate->addItem("300");ui->comBaudRate->addItem("600");ui->comBaudRate->addItem("1200");ui->comBaudRate->addItem("2400");ui->comBaudRate->addItem("4800");ui->comBaudRate->addItem("9600");ui->comBaudRate->addItem("14400");ui->comBaudRate->addItem("19200");ui->comBaudRate->addItem("115200");// 校验位ui->comParity->addItem("NONE");ui->comParity->addItem("ODD");ui->comParity->addItem("EVEN");ui->comParity->addItem("MARK");ui->comParity->addItem("SPACE");// 数据位ui->comDataBits->addItem("5");ui->comDataBits->addItem("6");ui->comDataBits->addItem("7");ui->comDataBits->addItem("8");// 停止位ui->comStopBits->addItem("1");ui->comStopBits->addItem("1.5");ui->comStopBits->addItem("2");ui->buttonSend->setEnabled(false);// connect(&mSerialPort, SIGNAL(readyRead()), this, SLOT(on_SerialPort_readyRead()));// 读取数据connect(&mSerialPort, &QSerialPort::readyRead, this, &Dialog::on_SerialPort_readyRead);}// 打开串口函数bool Dialog::getSerialPortConfig(){// 获取选择框的当前值QString name = ui->comPortName->currentText().split(" ")[0];QString rate = ui->comBaudRate->currentText();QString parity = ui->comParity->currentText();QString dataBits = ui->comDataBits->currentText();QString stopBits = ui->comStopBits->currentText();// 设置端口号mSerialPort.setPortName(name);// 设置波特率if(rate == "9600") {mSerialPort.setBaudRate(QSerialPort::Baud9600);}else if(rate == "19200"){mSerialPort.setBaudRate(QSerialPort::Baud19200);}else if(rate == "115200"){mSerialPort.setBaudRate(QSerialPort::Baud115200);}// 设置校验位if(parity == "NONE") {mSerialPort.setParity(QSerialPort::NoParity);}else if(parity == "ODD"){mSerialPort.setParity(QSerialPort::OddParity);}else if(parity == "EVEN"){mSerialPort.setParity(QSerialPort::EvenParity);}else if(parity == "MARK"){mSerialPort.setParity(QSerialPort::MarkParity);}else if(parity == "SPACE"){mSerialPort.setParity(QSerialPort::SpaceParity);}// 设置数据位if(dataBits == "5") {mSerialPort.setDataBits(QSerialPort::Data5);}else if(dataBits == "6"){mSerialPort.setDataBits(QSerialPort::Data6);}else if(dataBits == "7"){mSerialPort.setDataBits(QSerialPort::Data7);}else {mSerialPort.setDataBits(QSerialPort::Data8);}// 设置停止位if(stopBits == "1.5"){mSerialPort.setStopBits(QSerialPort::OneAndHalfStop);}else if(dataBits == "2"){mSerialPort.setStopBits(QSerialPort::TwoStop);}else {mSerialPort.setStopBits(QSerialPort::OneStop);}// 打开 以读写方式打开bool isOpen = mSerialPort.open(QSerialPort::ReadWrite);if(isOpen == true){qDebug() << "成功打开窗口" << name;}// 返回bool值return isOpen;}Dialog::~Dialog(){delete ui;}void Dialog::on_buttonOpenClear_clicked(){if(true == mIsOpen){mIsOpen = false;// 关闭串口mSerialPort.close();ui->buttonOpenClear->setText("打开");// 开启按钮ui->comPortName->setEnabled(true);ui->comBaudRate->setEnabled(true);ui->comParity->setEnabled(true);ui->comDataBits->setEnabled(true);ui->comStopBits->setEnabled(true);// 关闭发送按钮ui->buttonSend->setEnabled(false);}else {if(true == getSerialPortConfig()){mIsOpen = true;// 关闭按钮ui->buttonOpenClear->setText("关闭");ui->comPortName->setEnabled(false);ui->comBaudRate->setEnabled(false);ui->comParity->setEnabled(false);ui->comDataBits->setEnabled(false);ui->comStopBits->setEnabled(false);// 开启发送按钮ui->buttonSend->setEnabled(true);}}}// 发送数据槽函数void Dialog::on_buttonSend_clicked(){if(true == mIsOpen){QString str = ui->textEditWrite->toPlainText();// 发送数据mSerialPort.write(str.toUtf8().data());}}// 接收数据槽函数void Dialog::on_SerialPort_readyRead(){// 取出所有的数据QByteArray recvData = mSerialPort.readAll();// 转码,支持中文QString str = QString::fromLocal8Bit( recvData );qDebug() << str;// 将数据写到文本框中ui->textEditRead->append(str);}
