您的位置:首页 > 编程语言 > Qt开发

qt串口调试助手

2017-09-01 15:12 99 查看
#-------------------------------------------------
#
# 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();
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 串口调试助手