qt串口调试助手

来源:互联网 发布:比特币软件 编辑:程序博客网 时间:2024/04/28 00:29
#-------------------------------------------------## Project created by QtCreator 2017-09-01T13:29:03##-------------------------------------------------QT       += core gui serialportgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = uartassistantTEMPLATE = appSOURCES += main.cpp\        dialog.cppHEADERS  += dialog.hFORMS    += dialog.ui
==============================================================================================
#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include <QSerialPortInfo>#include <QSerialPort>#include <QDebug>#include <QList>namespace Ui {class Dialog;}class Dialog : public QDialog{    Q_OBJECTpublic:    explicit Dialog(QWidget *parent = 0);    ~Dialog();public:    bool getSerialPortConfig(void);private slots://    void on_CBoxSerailPort_currentIndexChanged(const QString &arg1);    void on_BtnOpen_clicked();    void on_BtnSend_clicked();    void on_SerialPort_readyRead();private:    Ui::Dialog *ui;    QSerialPort mSerialPort;    bool mIsOpen;    QString mPortName;    QString mBaudRate;    QString mParity;    QString mDataBits;    QString mStopBits;};#endif // DIALOG_H

======================================================================================
#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::Dialog){    ui->setupUi(this);    mIsOpen = false;    //智能识别当前系统的有效串口号    QList<QSerialPortInfo> serialPortInfo = QSerialPortInfo::availablePorts();    int count = serialPortInfo.count();    for (int i=0; i<count; i++)    {        ui->CBoxSerailPort->addItem(serialPortInfo.at(i).portName());    }//    ui->CBoxSerailPort->addItem("COM4");//    ui->CBoxSerailPort->addItem("COM5");//    ui->CBoxSerailPort->addItem("COM6");//    ui->CBoxSerailPort->addItem("COM7");//    ui->CBoxSerailPort->addItem("COM8");//    ui->CBoxSerailPort->addItem("COM9");/*    mSerialPort.setPortName("COM1");    mSerialPort.setBaudRate(QSerialPort::Baud115200);    mSerialPort.setParity(QSerialPort::NoParity);    mSerialPort.setDataBits(QSerialPort::Data8);    mSerialPort.setStopBits(QSerialPort::OneStop);    mSerialPort.open(QSerialPort::ReadWrite);    if (mSerialPort.isOpen())    {        qDebug() << "串口打开成功";        mSerialPort.write("hello world!");    }*/    connect(&mSerialPort, SIGNAL(readyRead()), this, SLOT(on_SerialPort_readyRead()));}Dialog::~Dialog(){    delete ui;}bool Dialog::getSerialPortConfig(){    //获取串口配置    mPortName = ui->CBoxSerailPort->currentText();    mBaudRate = ui->CboxBaudRate->currentText();    mParity = ui->CboxParity->currentText();    mDataBits = ui->CboxDataBits->currentText();    mStopBits = ui->CboxStopBits->currentText();    //设置串口配置    //端口号    mSerialPort.setPortName(mPortName);    //波特率    if ("9600" == mBaudRate)    {        mSerialPort.setBaudRate(QSerialPort::Baud9600);    }    else if ("19200" == mBaudRate)    {        mSerialPort.setBaudRate(QSerialPort::Baud19200);    }    else    {        mSerialPort.setBaudRate(QSerialPort::Baud115200);    }    //校验位    if ("NONE" == mParity)    {        mSerialPort.setParity(QSerialPort::NoParity);    }    else if ("ODD" == mParity)    {        mSerialPort.setParity(QSerialPort::OddParity);    }    else    {        mSerialPort.setParity(QSerialPort::EvenParity);    }    //数据位    if ("5" == mDataBits)    {        mSerialPort.setDataBits(QSerialPort::Data5);    }    else if ("6" == mDataBits)    {        mSerialPort.setDataBits(QSerialPort::Data6);    }    else if ("7" == mDataBits)    {        mSerialPort.setDataBits(QSerialPort::Data7);    }    else    {        mSerialPort.setDataBits(QSerialPort::Data8);    }    //停止位    if ("1.5" == mStopBits)    {        mSerialPort.setStopBits(QSerialPort::OneAndHalfStop);    }    if ("2" == mStopBits)    {        mSerialPort.setStopBits(QSerialPort::TwoStop);    }    else    {        mSerialPort.setStopBits(QSerialPort::OneStop);    }    return mSerialPort.open(QSerialPort::ReadWrite);}/*void Dialog::on_CBoxSerailPort_currentIndexChanged(const QString &arg1){    ui->LbSerialPort->setText(arg1);}*/void Dialog::on_BtnOpen_clicked(){    if (mIsOpen)    {        //当前串口助手已经打开了一个串口这时要执行关闭动作        mSerialPort.close();        ui->BtnOpen->setText("打开");        mIsOpen = false;        ui->CBoxSerailPort->setEnabled(true);        ui->CboxBaudRate->setEnabled(true);        ui->CboxParity->setEnabled(true);        ui->CboxDataBits->setEnabled(true);        ui->CboxStopBits->setEnabled(true);    }    else    {        //当前串口助手没有打开串口,要执行打开动作        if (getSerialPortConfig())        {            mIsOpen = true;            ui->BtnOpen->setText("关闭");            qDebug() << "成功打开串口" << mPortName;            ui->CBoxSerailPort->setEnabled(false);            ui->CboxBaudRate->setEnabled(false);            ui->CboxParity->setEnabled(false);            ui->CboxDataBits->setEnabled(false);            ui->CboxStopBits->setEnabled(false);        }//        else//        {//            mIsOpen = false;//        }    }}void Dialog::on_BtnSend_clicked(){    if (mIsOpen)    {        mSerialPort.write(ui->TeditSend->toPlainText().toStdString().c_str());    }}void Dialog::on_SerialPort_readyRead(){    if (mIsOpen)    {        QByteArray recvData = mSerialPort.readAll();        ui->TeditRecv->append(QString(recvData));    }}

============================================================================

#include "dialog.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    Dialog w;    w.show();    return a.exec();}



原创粉丝点击