Qt 做一个简单的串口调试助手上位机

需要先添加头文件两个

#include <QtSerialPort/QSerialPort>//提供串口功能
#include <QtSerialPort/QSerialPortInfo>//系统串口访问功能

在工程文件.pro里添加QT +=serialport

以下是基本代码

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    setWindowTitle("串口调试助手V1.0");//serial  在Mywidget头文件中
    serial=new  QSerialPort(this);//指定父对象
    ui->pushButton_clear->setEnabled(false);
    ui->pushButton_send->setEnabled(false);
    ui->pushButton_change->setEnabled(true);
    foreach(const  QSerialPortInfo  &info,QSerialPortInfo::availablePorts())//可以不使用
    {
        serial->setPort(info);
        if(serial->open(QIODevice::ReadWrite))
        {
            ui->comboBox_port->addItem(serial->portName());//添加端口号
            serial->close();
        }
    }//自动搜寻串口号并保存
    connect(ui->pushButton_change,&QPushButton::clicked,
            [=]()
    {
        if(true==flag)
        {
            //打开串口
            ui->pushButton_change->setText("关闭串口");
            flag=false;
            ui->pushButton_clear->setEnabled(true);
            ui->pushButton_send->setEnabled(true);
            serial->setPortName(ui->comboBox_port->currentText());
            serial->open(QIODevice::ReadWrite);
            qint32 bar=ui->comboBox_baurd->currentText().toInt();
            cout<<bar;
            serial->setBaudRate(bar);
            //设置数据位
            switch(ui->comboBox_databit->currentText().toInt())
            {
                case 8:
                    serial->setDataBits(QSerialPort::Data8);
                    break;
                default :
                    break;
            }
            //设置校验位
            if(ui->comboBox_check->currentText().toUtf8()=="无")
                {
                serial->setParity(QSerialPort::NoParity);//无校验
            }
            //停止位
            switch(ui->comboBox_stop->currentText().toInt())
            {
            case 1:
                serial->setStopBits(QSerialPort::OneStop);
                break;
             case 2:
                serial->setStopBits(QSerialPort::TwoStop);//
                break;
            default:
                break;
            }
            connect(serial,&QSerialPort::readyRead,
                    [=]()
            {
                cout<<"数据接受中";
              QByteArray arry=  serial->readAll();
              ui->textEdit_reseive->insertPlainText(arry);
            });

        }else
        {
            //关闭串口
            ui->pushButton_change->setText("打开串口");
            flag=true;
            serial->close();//关闭
            ui->pushButton_clear->setEnabled(false);
            ui->pushButton_send->setEnabled(false);
        }

    });//点击后显示关闭串口
       //再次按下时候执行打开或者关闭

}

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

void MyWidget::on_pushButton_clear_clicked()//清除,按键转到槽
{
    ui->textEdit_reseive->clear();
}

void MyWidget::on_pushButton_send_clicked()//发送,按键转到槽
{
    serial->write(ui->textEdit_send->toPlainText().toUtf8().data());//试试看
    cout<<"数据发送中";

}

效果图:

使用USB转TTL,自测效果图:

猜你喜欢

转载自blog.csdn.net/shuiyihang0981/article/details/82077778