Qt串口助手开发

Qt串口助手

  • ui设计图

串口助手ui

  • 效果
    在这里插入图片描述
代码实现
/****MySerialPort3.h****/
#ifndef MYSERIALPORT3_H
#define MYSERIALPORT3_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>


namespace Ui {
class MySerialPort3;
}

class MySerialPort3 : public QMainWindow
{
    Q_OBJECT

public:
    explicit MySerialPort3(QWidget *parent = nullptr);
    ~MySerialPort3();

    void serialInit();
    void baudRateInit();
    void dataBitsInit();
    void stopBitsInit();
    void parityInit();
    void flowControlInit();

private slots:
    void on_btnClearRecv_clicked();

    void on_btnClearSend_clicked();

    void on_btnSend_clicked();
    void on_readyRead();

    void on_btnSwitch_clicked();

private:
    Ui::MySerialPort3 *ui;

    QSerialPort *serialPort;
    QSerialPortInfo *serialPortInfo;
};

#endif // MYSERIALPORT3_H

/****MySerialPort3.cpp**/
#include "mySerialPort3.h"
#include "ui_mySerialPort3.h"

#include <QMessageBox>
#include <QDebug>

MySerialPort3::MySerialPort3(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MySerialPort3)
{
    ui->setupUi(this);


      serialInit();
      baudRateInit();
      dataBitsInit();
      stopBitsInit();
       parityInit();
       flowControlInit();
       connect(serialPort,&QSerialPort::readyRead,this,&MySerialPort3::on_readyRead);
}

MySerialPort3::~MySerialPort3()
{
    delete ui;
}

//扫描串口
void MySerialPort3::serialInit()
{
    serialPort = new QSerialPort(this);
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
        ui->cmbChooseSerial->addItem(info.portName());
    }
}

//波特率初始化
void MySerialPort3::baudRateInit()
{
    QStringList strList;
    strList<<"9600"<<"115200";
    ui->cmbBaudRate->addItems(strList);
}

//数据位
  void MySerialPort3::dataBitsInit()
  {
      QStringList strList;
      strList<<"5"<<"6"<<"7"<<"8";
      ui->cmbDataBits->addItems(strList);
  }

  //停止位
 void MySerialPort3:: stopBitsInit()
 {
     QStringList strList;
     strList<<"1"<<"2";
     ui->cmbStopBits->addItems(strList);
 }

 //校验位
void MySerialPort3::parityInit()
{
    ui->cmbParity->addItem(QString::number(QSerialPort::NoParity));
    ui->cmbParity->addItem(QString::number(QSerialPort::OddParity));
    ui->cmbParity->addItem(QString::number(QSerialPort::EvenParity));
    ui->cmbParity->addItem(QString::number(QSerialPort::MarkParity));
}

void MySerialPort3::flowControlInit()
{
    ui->cmbFlowControl->addItem(QString::number(QSerialPort::NoFlowControl));
}

void MySerialPort3::on_btnClearRecv_clicked()
{
    ui->textEditRecv->clear();
}

void MySerialPort3::on_btnClearSend_clicked()
{
    ui->textEditSend->clear();
}

//打开串口的情况下才发送
void MySerialPort3::on_btnSend_clicked()
{
    if(!serialPort->isOpen()){
        QMessageBox::critical(this,"串口","串口未打开",QMessageBox::Ok);
        return;
    }

    //读取发送框中内容并发送
    //serialPort->write(ui->textEditSend->toPlainText().toUtf8().data());//不能发送中文
      serialPort->write(ui->textEditSend->toPlainText().toLocal8Bit());//可以发送中文
    ui->textEditSend->clear();

}

void MySerialPort3::on_readyRead()
{
    if(!serialPort->isOpen()){
        QMessageBox::critical(this,"串口","串口未打开",QMessageBox::Ok);
        return;
    }
    QByteArray arry = serialPort->readAll();

   // ui->textEditRecv->append(QString(arry.data()));//不能接收中文
    //ui->textEditRecv->append(QString(arry));//不能接收中文
  
 ui->textEditRecv->append(QString::fromLocal8Bit(arry));//可以接收中文
}

void MySerialPort3::on_btnSwitch_clicked()
{
    if(ui->btnSwitch->text() == "打开串口"){
        //设置串口
        serialPort->setPortName(ui->cmbChooseSerial->currentText());
        //设置波特率
        switch (ui->cmbBaudRate->currentText().toInt()) {
        case 9600:
             serialPort->setBaudRate(QSerialPort::Baud9600);
            break;
        case 115200:
            serialPort->setBaudRate(QSerialPort::Baud115200);
            break;
        default:
            break;
        }

        //设置数据位
        switch (ui->cmbDataBits->currentText().toInt()) {
        case 5:
            serialPort->setDataBits(QSerialPort::Data5);
            break;
        case 6:
            serialPort->setDataBits(QSerialPort::Data6);
            break;
        case 7:
            serialPort->setDataBits(QSerialPort::Data7);
            break;
        case 8:
            serialPort->setDataBits(QSerialPort::Data8);
            break;
        default:
            break;
        }
        //设置停止位
        switch (ui->cmbStopBits->currentText().toInt()) {
        case 1:
            serialPort->setStopBits(QSerialPort::OneStop);
            break;
        case 2:
            serialPort->setStopBits(QSerialPort::TwoStop);
            break;
        default:
            break;

        }

        //设置校验位
        if(ui->cmbParity->currentText() == QString(QSerialPort::OddParity))
            serialPort->setParity(QSerialPort::OddParity);
        else if(ui->cmbParity->currentText() == QString(QSerialPort::EvenParity))
            serialPort->setParity(QSerialPort::EvenParity);
        else if(ui->cmbParity->currentText() == QString(QSerialPort::MarkParity))
            serialPort->setParity(QSerialPort::MarkParity);
        //设置流控制位
        serialPort->setFlowControl(QSerialPort::NoFlowControl);

       bool isOpen =  serialPort->open(QIODevice::ReadWrite);
       if(!isOpen)
           QMessageBox::critical(this,"critical","串口打开失败",QMessageBox::Ok);

       ui->btnSwitch->setText(QString("关闭串口"));
       ui->cmbChooseSerial->setEnabled(false);
       ui->cmbBaudRate->setEnabled(false);
       ui->cmbDataBits->setEnabled(false);
       ui->cmbStopBits->setEnabled(false);
       ui->cmbParity->setEnabled(false);
       ui->cmbFlowControl->setEnabled(false);

    }else{
        serialPort->close();

        ui->btnSwitch->setText(QString("打开串口"));
        ui->cmbChooseSerial->setEnabled(true);
        ui->cmbBaudRate->setEnabled(true);
        ui->cmbDataBits->setEnabled(true);
        ui->cmbStopBits->setEnabled(true);
        ui->cmbParity->setEnabled(true);
        ui->cmbFlowControl->setEnabled(true);
    }
}

/*******main.cpp***************/
#include "mainwindow.h"
#include <QApplication>

#include "mySerialPort1.h"
#include "mySerialPort2.h"
#include "mySerialPort3.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    MySerialPort3 serialPort3;
    serialPort3.show();

    return a.exec();
}

注意:实验所用到的串口是虚拟串口,虚拟串口使用的软件为“ Virtual Serial Port Driver 6.9 ”。
虚拟串口软件截图:
在这里插入图片描述
在使用添加串口之后电脑的"设备管理器"中会看到虚拟出来的串口。
电脑中虚拟出来的串口如下:
在这里插入图片描述

展示
在这里插入图片描述

在这里插入图片描述
接收中文乱码,与发送中文乱码问题解决:

/**发送数据和接收数据的方法中修改为下面的两行代码即可解决*/
serialPort->write(ui->textEditSend->toPlainText().toLocal8Bit());//支持发送中文
 ui->textEditRecv->append(QString::fromLocal8Bit(arry));//支持接收中文
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QT串口助手是一款基于QT开发的串口调试工具。它可以用于串口通信的功能测试、命令发送与接收等调试工作。 QT串口助手具有简单易用的特点。它提供了直观的用户界面,用户可以方便地设置串口的端口号、波特率、校验位等参数。用户可以通过界面上的发送按钮,发送指定的命令给目标设备,并实时查看接收数据。同时,QT串口助手还支持自定义命令的编辑,用户能够按照自己的需求定义需要发送的数据。 QT串口助手还具备实时监测串口数据的能力。在串口打开的状态下,它能够持续地监听串口接收的数据,并将其显示在界面的接收区域中。用户可以清楚地查看接收到的数据内容,帮助用户判断通信是否正常,并进行相应的调试。 此外,QT串口助手还支持十六进制显示功能。用户可以选择以十进制还是十六进制的形式查看接收和发送的数据。这对于一些需要进行十六进制数据处理的应用场景非常有帮助。 总之,QT串口助手是一款方便实用的串口调试工具。它能够为用户提供简单易用的操作界面,并具备实时监测数据、自定义命令等功能,为串口通信调试提供便利。 ### 回答2: Qt串口助手是一款功能强大的调试工具,用于帮助开发者在Qt开发环境下进行串口通信的调试工作。 首先,Qt串口助手提供了友好的用户界面,使得串口通信的设置和调试变得简单易用。它支持多种串口参数设置,如波特率、数据位、校验位和停止位等,用户可以根据需求灵活地设置串口参数。 其次,Qt串口助手支持发送和接收数据。用户可以在发送数据输入框中输入要发送的数据,点击发送按钮即可将数据发送到串口设备。同时,接收数据框会实时显示从串口设备接收到的数据,方便用户查看和分析。 另外,Qt串口助手还提供了数据发送和接收的统计功能,用户可以实时监测发送和接收的数据量,从而方便对数据进行分析和优化。 此外,Qt串口助手还支持自定义发送指令,用户可以通过输入要发送的指令以及相应的参数,进行自定义的指令发送。这对于特定的串口设备调试非常有用。 最后,Qt串口助手还支持串口设备的自动检测和连接,用户只需点击扫描按钮即可自动检测当前连接的串口设备,并进行连接。这极大地方便了用户在多个串口设备之间进行切换。 综上所述,Qt串口助手是一款强大且易用的串口调试工具,能够满足开发者在Qt开发环境下对串口通信进行调试的需求。 ### 回答3: Qt串口助手是一款用于调试串口通信的工具。在开发和调试串口通信相关的应用程序时,我们经常需要通过串口与外部设备进行数据的收发和交互。Qt串口助手提供了方便易用的界面和功能,帮助我们轻松地完成串口调试工作。 Qt串口助手的主要特点有: 1. 支持多种串口通信参数设置:包括波特率、数据位、校验位、停止位等,可根据实际需求进行配置。 2. 支持发送和接收功能:我们可以在发送区输入要发送的数据,并通过串口将数据发送出去;同时,在接收区可以实时显示收到的数据,方便我们进行及时观察和调试。 3. 支持ASCII和HEX两种数据表示方式:我们可以选择以ASCII字符或十六进制格式显示发送和接收的数据,便于不同需求下的数据解析和调试。 4. 支持自定义指令发送:我们可以预先定义一些常用的指令,在需要时快速选择并发送,提高调试效率。 5. 支持数据循环发送:我们可以设置数据的发送间隔时间和发送次数,实现连续发送指定数据,方便复杂场景下的调试。 Qt串口助手可以帮助我们快速而准确地获取串口通信的数据信息,方便我们进行串口通信开发和调试工作。不仅如此,Qt串口助手还具有非常友好的界面和操作方式,使得使用起来非常简单和方便。无论是初学者还是有经验的开发者,都能很好地利用该工具完成串口调试任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值