C++ Qt简易串口助手
2020 年 05 月 13 日 330 148 字 暂无评论

1.UI界面设计

  • 这里我用的是mainwindow带ui设计的框架,当然也可以用widget不带菜单栏工具栏的框架。

请输入图片描述

2.主要程序代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

/*------------------user----------------*/
#include <QtSerialPort>
#include <QDebug>
/*--------------------------------------*/

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    //button
    void btn_open_port(bool);
    void btn_close_port(bool);
    void btn_send_data(bool);
    //receive data
    void recevie_data();

private:
    Ui::MainWindow *ui;
    /*---------------funtion---------------*/
    void system_init();
    /*---------------variable--------------*/
    QSerialPort global_port;
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    //自适应高分辨率
    #if (QT_VERSION >= QT_VERSION_CHECK(5,9,0))
        QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    #endif

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //user
    system_init();
}

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

/*-------------funtions------------*/
void MainWindow::system_init()
{
    //port config
    global_port.setParity(QSerialPort::NoParity);//无奇偶校验
    global_port.setDataBits(QSerialPort::Data8);//数据位8
    global_port.setStopBits(QSerialPort::OneStop);//停止位1

    //connect()
    connect(ui->btn_open,&QPushButton::clicked,this,&MainWindow::btn_open_port);
    connect(ui->btn_close,&QPushButton::clicked,this,&MainWindow::btn_close_port);
    connect(ui->btn_send,&QPushButton::clicked,this,&MainWindow::btn_send_data);
    connect(&global_port,&QSerialPort::readyRead,this,&recevie_data);
}


/*-------------signal--------------*/
void MainWindow::btn_open_port(bool)
{
    /*------------------port_name-------------------*/
    switch(ui->cmb_port_name->currentIndex())
    {
        case 0:
            global_port.setPortName("COM1");
            break;
        case 1:
            global_port.setPortName("COM2");
            break;
        case 2:
            global_port.setPortName("COM3");
            break;
        case 3:
            global_port.setPortName("COM4");
            break;
        case 4:
            global_port.setPortName("COM5");
            break;
        case 5:
            global_port.setPortName("COM6");
            break;
        case 6:
            global_port.setPortName("COM7");
            break;
        case 7:
            global_port.setPortName("COM8");
            break;
        default:
            global_port.setPortName("COM9");
            break;
    }
    /*-------------baud_rate----------------------*/
    switch(ui->cmb_baud_rate->currentIndex())
    {
    case 0:
        global_port.setBaudRate(QSerialPort::Baud115200);
        break;
    case 1:
        global_port.setBaudRate(QSerialPort::Baud57600);
        break;
    case 2:
        global_port.setBaudRate(QSerialPort::Baud38400);
        break;
    case 3:
        global_port.setBaudRate(QSerialPort::Baud19200);
        break;
    case 4:
        global_port.setBaudRate(QSerialPort::Baud9600);
        break;
    case 5:
        global_port.setBaudRate(QSerialPort::Baud4800);
        break;
    case 6:
        global_port.setBaudRate(QSerialPort::Baud2400);
        break;
    default:
        global_port.setBaudRate(QSerialPort::Baud1200);
        break;
    }
    //OPEN
    global_port.open(QIODevice::ReadWrite);
    ui->label_status->setText("串口打开");
}
/*--------------close_serial------------------------*/
void MainWindow::btn_close_port(bool)
{
    ui->label_status->setText("串口关闭");
    global_port.close();
}
/*---------------send_data---------------------------*/
void MainWindow::btn_send_data(bool)
{
   QString data =  ui->line_send_data->text();
   QByteArray array = data.toLatin1();
   global_port.write(array);
}
/*---------------receive_data---------------------------*/
void MainWindow::recevie_data()
{
    QByteArray array = global_port.readAll();
    if(ui->checkBox->checkState() == Qt::Checked)
    {
        ui->plainTextEdit->insertPlainText(QString(array.toHex(' ').toUpper().append(' ')));
    }
    else
    {
        ui->plainTextEdit->insertPlainText(QString(array));
    }
}

3.项目图标添加

  • 在网上找到图ico格式的最好48*48,然后在.pro文件添加
RC_ICONS = XW.ico //XW.ico为我文件夹里的文件名

运行结果:

请输入图片描述

发送:

请输入图片描述

字符接收:

请输入图片描述

16进制接收:

请输入图片描述


版权属于:zfh

本文链接:http://zfhblog.com/index.php/archives/46/



评论已关闭