0
点赞
收藏
分享

微信扫一扫

使用QtCreator C++编写串口调试助手


使用QtCreator C++编写串口调试助手_控件

使用QtCreator C++编写串口调试助手_#include_02

Qt小白一枚,喜欢嵌入式应用,以前都是使用别人的串口调试助手,学习了C++以后,自己也尝试着做了简单的串口调试助手,分享给大家吧,希望能帮助到大家,如果有错误,请大家指正。话不多说开干!

1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计)

(界面设计的过程中,每一个控件的名称最好进行修改,便于后续控件太多不好区分,给控件命名的时候一定要就针对性,一下明白这个控件是干什么的。)

使用QtCreator C++编写串口调试助手_#include_03

 2.首先看一下准备工作。在pro文件中添加串口需要的文件

使用QtCreator C++编写串口调试助手_控件_04

 3.widget.h文件 (看看代码一睹为快)

#ifndef WIDGET_H

#define WIDGET_H

#include <QSerialPort>

#include <QWidget>

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

    Q_OBJECT

public:

    QSerialPort *serialport;

    explicit Widget(QWidget *parent = nullptr);

    ~Widget();

private slots:

    //打开串口槽函数

    void on_port_openBt_clicked();

    //关闭串口槽函数

    void on_port_closeBt_clicked();

    //自定义的槽函数的声明

    void serialreadtext();

//数据发送槽函数

    void on_data_sendBt_clicked();

//数据接受区和数据发送区清空槽函数

    void on_rev_clearBt_clicked();

private:

    Ui::Widget *ui;

};

#endif // WIDGET_H

4.widget.cpp文件

#include "widget.h"

#include "ui_widget.h"

#include<QSerialPortInfo>

#include <QMessageBox>

#include <QString>

Widget::Widget(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Widget)

{   serialport = new QSerialPort(this); //创建一个串口对象

    ui->setupUi(this);

    //这样我们就获取到 可用的串口名字了

    QStringList m_serialPortName;

    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())

    {

        m_serialPortName << info.portName();

    }

    //添加串口到conbox控件中

    ui->port_comboBox->addItems(m_serialPortName);

    //接收数据需要自己关联槽函数

    connect(serialport,SIGNAL(readyRead()),this , SLOT(serialreadtext()));

}

Widget::~Widget()

{

    delete ui;

}

//读数据

void Widget::serialreadtext()

{

    QString buffer;

    buffer=QString(serialport->readAll());

    ui->revEdit->appendPlainText(buffer);

}

void Widget::on_port_openBt_clicked()

{

    QSerialPort::BaudRate baudRate;

    QSerialPort::DataBits dataBits;

    QSerialPort::Parity parity;

    QSerialPort::StopBits stopbits;

    //波特率

    if(ui->rate_comboBox->currentText()=="115200")

    {

        baudRate=QSerialPort::Baud115200;

    }else if(ui->rate_comboBox->currentText()=="9600")

    {

        baudRate=QSerialPort::Baud9600;

    }else {

        baudRate=QSerialPort::Baud4800;

    }

    //数据位

    if(ui->data_comboBox->currentText()=="8")

    {

        dataBits=QSerialPort::Data8;

    }else if(ui->data_comboBox->currentText()=="7")

    {

        dataBits=QSerialPort::Data7;

    }else if(ui->data_comboBox->currentText()=="6")

    {

        dataBits=QSerialPort::Data6;

    }else if (ui->data_comboBox->currentText()=="5")

    {

        dataBits=QSerialPort::Data5;

    }

    //停止位

    if(ui->stop_comboBox->currentText()=="1")

    {

        stopbits= QSerialPort::OneStop;

    } else if(ui->stop_comboBox->currentText()=="2")

    {

        stopbits= QSerialPort::TwoStop;

    }else if(ui->stop_comboBox->currentText()=="1.5")

    {

        stopbits= QSerialPort::OneAndHalfStop;

    }

    //校验位

    if(ui->cheak_comboBox->currentText()=="None")

    {

        parity=QSerialPort::NoParity;

    }

    //1.配置端口号

    serialport->setPortName(ui->port_comboBox->currentText());

    //2.配置波特率

    serialport->setBaudRate(baudRate);

    //设置数据位

    serialport->setDataBits(dataBits);

    //设置校验位

    serialport->setParity(parity);

    //停止位

    serialport->setStopBits(stopbits);

    if(serialport->isOpen())//如果串口已经打开了 先给他关闭了

    {

        serialport->clear();

        serialport->close();

    }

    if(serialport->open(QIODevice::ReadWrite)==true)

    {

        QMessageBox::information(this ,"提示","串口打开成功");

    }else

    {

        QMessageBox::critical(this ,"提示","串口打开失败");

    }

}

//关闭串口

void Widget::on_port_closeBt_clicked()

{

    QMessageBox::information(this ,"提示","串口关闭成功");

     serialport->close();

}

//发送数据

void Widget::on_data_sendBt_clicked()

{

    serialport->write(ui->sendEdit->text().toLocal8Bit().data());

}

//清空接受区

void Widget::on_rev_clearBt_clicked()

{

    ui->revEdit->clear();

}




举报

相关推荐

0 条评论