#-------------------------------------------------
#
# 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();
}