Qt简单串口调试助手源码

    xiaoxiao2025-08-15  10

    对于一个做嵌入式的人来讲,最熟悉的上位机软件就是串口调试助手了,所以开始学Qt的时候,就想着要实现一个串口调试肋手,今天终于写的差不多了,把他共享出来。也感谢那些网上开源的人们对我的帮助,谢谢!

    1.开发环境ubuntu16.04+Qt5.6.1

    2.串口调试助手效果图

    如出现 permission denied请用sudo执行程序就可

    3.源码

    mainwindow.h文件

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class QSerialPort; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow {     Q_OBJECT public:     explicit MainWindow(QWidget *parent = 0);     ~MainWindow(); signals: private slots:     void on_openButton_clicked();     void on_sendButton_clicked();     void readyReadSlot();     void on_pushButtonClearR_clicked();     void on_pushButtonClearS_clicked(); private:     QSerialPort *serialPort;     Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

     

     

    mainwindow.c文件

     

    #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtSerialPort/QtSerialPort> #include <QtSerialPort/QSerialPortInfo> #include <QDebug> MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);     foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())//获取可用的串口         ui->serialPortComboBox->addItem(info.portName());     ui->radioButtonTextR->setChecked(true);     ui->radioButtonTextS->setChecked(true);     serialPort = new QSerialPort();     setWindowTitle(tr("串口助手")); } MainWindow::~MainWindow() {     delete ui;     delete serialPort; } void MainWindow::on_openButton_clicked()          //打开串口槽函数 {     serialPort->setPortName(ui->serialPortComboBox->currentText());//获取要打开的串口     if(!serialPort->isOpen())                     //如果之前是没有打开的则进行open动作     {         if(serialPort->open(QIODevice::ReadWrite))//如果打开成功了,则按钮显示“关闭”         {             //××××××××××××××××××××××××××设置默认串口参数××××××××××××××××××××××××××××××××//             //serialPort->setBaudRate(QSerialPort::Baud115200);       //波特率19200             serialPort->setBaudRate(ui->comboBoxBaud->currentText().toInt());             serialPort->setDataBits(QSerialPort::Data8);           //数据位8位             serialPort->setFlowControl(QSerialPort::NoFlowControl);//无流控             switch (ui->comboBoxStop->currentIndex()) {             case 0:                 serialPort->setStopBits(QSerialPort::OneStop);         //1位停止位                 break;             case 1:                 serialPort->setStopBits(QSerialPort::OneAndHalfStop);         //1.5位停止位                 break;             case 2:                 serialPort->setStopBits(QSerialPort::TwoStop);         //2位停止位                 break;             default:                 serialPort->setStopBits(QSerialPort::UnknownStopBits);                 break;             }             switch (ui->comboBoxParity->currentIndex()) {             case 0:                 serialPort->setParity(QSerialPort::NoParity);          //无较验位                 break;             case 1:                 serialPort->setParity(QSerialPort::OddParity);          //奇较验位                 break;             case 2:                 serialPort->setParity(QSerialPort::EvenParity);          //偶较验位                 break;             default:                 break;             }             serialPort->setReadBufferSize(500);                    //设置数据缓冲区大小,以后可以写成宏的形式             //××××××××××××××××××××××××××设置默认串口参数××××××××××××××××××××××××××××××××//             connect(serialPort, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));             ui->openButton->setText(tr("关闭"));         }         else         {             qDebug()<<serialPort->errorString();             this->statusBar()->showMessage(serialPort->errorString());         }     }     else                                          //如果串口处于打开的状态,则关闭     {         serialPort->close();         ui->openButton->setText(tr("打开"));     } } void MainWindow::on_sendButton_clicked() {     QString str = ui->sendTextEdit->toPlainText();//获取要发送的内容     if(serialPort->isOpen())                      //如果之前是没有打开的则进行open动作     {         if(ui->radioButtonTextS->isChecked())         {             //sendData = str.toLatin1();             QByteArray sendData = str.toUtf8();             qDebug() << "发送文本";             serialPort->write(sendData);         }else if(ui->radioButtonHexS->isChecked())         {             QByteArray str2 = QByteArray::fromHex (str.toLatin1().data());             qDebug() << "发送十六进制";             serialPort->write(str2);         }     } } void MainWindow::readyReadSlot()                 //接收数据槽函数 {     QByteArray arr = serialPort->readAll();     ui->receiveTextEdit->moveCursor(QTextCursor::EndOfLine);     if(ui->radioButtonTextR->isChecked())     {         ui->receiveTextEdit->insertPlainText(arr);         qDebug() << "接收文本";     }else if(ui->radioButtonHexR->isChecked())     {         qDebug() << "接收十六进制"; //        ui->receiveTextEdit->toPlainText();         ui->receiveTextEdit->insertPlainText(arr.toHex());     }     //ui->receiveTextEdit->setText(arr);     //ui->receiveTextEdit->append(arr); } void MainWindow::on_pushButtonClearR_clicked() {     ui->receiveTextEdit->clear(); } void MainWindow::on_pushButtonClearS_clicked() {     ui->sendTextEdit->clear(); }

    源码:https://download.csdn.net/download/maowendi/9620186

    转载请注明原文地址: https://ju.6miu.com/read-1301757.html
    最新回复(0)