Qt简单串口调试助手源码

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

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

2.串口调试助手效果图

Qt简单串口调试助手源码_第1张图片

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

3.源码

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include
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
#include
#include
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()<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

你可能感兴趣的:(Qt)