qt串口调试助手

xiaoxiao2021-02-28  55

#------------------------------------------------- # # Project created by QtCreator 2017-09-01T13:29:03 # #------------------------------------------------- QT += core gui serialport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = uartassistant TEMPLATE = app SOURCES += main.cpp\ dialog.cpp HEADERS += dialog.h FORMS += 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_OBJECT public: 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(); }

转载请注明原文地址: https://www.6miu.com/read-82750.html

最新回复(0)