• QT串口ui设计和解决显示中文乱码


    【1】UTF-8和GBK


    ★UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。
    是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。
    UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。
    UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。
    如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。


    ★GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。
    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。
    GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
    GBK是GB2312的扩展,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。
    ★GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换: GBK、GB2312--Unicode--UTF8
    UTF8--Unicode--GBK、GB2312
    ★在简体中文windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使用0x80~0xFF范围的2个字节来表示1个中文字符。
    0x00~0x7F之间的字符,依旧是1个字节代表1个字符。Unicode(UTF-16)编码则所有字符都用2个字节表示。

    【2】SerialTool.pro

    在这里插入图片描述

    【3】mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include<QSerialPort>//串口头文件
    #include<QTextCodec>
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        void InitUI();
    
    private:
        Ui::MainWindow *ui;
        QTextCodec *codec;
    };
    #endif // MAINWINDOW_H
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    【4】mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setWindowTitle("Serial Tool");
        //codec = QTextCodec::codecForName("UTF-8");
        codec = QTextCodec::codecForName("GBK");//System(简体中文windows系统默认指的是GBK编码)
        QTextCodec::setCodecForLocale(codec);
        InitUI();//初始化串口
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    //初始化控件
    void MainWindow::InitUI()
    {
        //端口名称
        for(int i=0;i<10;i++)
        {
            ui->CB_portname->addItem(QString("COM%1").arg(i));//添加文本 【追加形式】
        }
        //波特率  【追加形式】
        ui->CB_btl->addItem(QString("1200") ,QSerialPort::Baud1200);
        ui->CB_btl->addItem(QString("2400") ,QSerialPort::Baud2400);
        ui->CB_btl->addItem(QString("4800") ,QSerialPort::Baud4800);
        ui->CB_btl->addItem(QString("9600") ,QSerialPort::Baud9600);
        ui->CB_btl->addItem(QString("19200") ,QSerialPort::Baud19200);
        ui->CB_btl->addItem(QString("115200") ,QSerialPort::Baud115200);
    
        //数据位
        ui->CB_databit->addItem(QString("5"),QSerialPort::Data5);
        ui->CB_databit->addItem(QString("6"),QSerialPort::Data6);
        ui->CB_databit->addItem(QString("7"),QSerialPort::Data7);
        ui->CB_databit->addItem(QString("8"),QSerialPort::Data8);
        //奇偶校验位
        ui->CB_jioubit->addItem(codec->toUnicode("无"),QSerialPort::NoParity);
        ui->CB_jioubit->addItem(codec->toUnicode("奇"),QSerialPort::EvenParity);
        ui->CB_jioubit->addItem(codec->toUnicode("偶"),QSerialPort::OddParity);
    
        //停止位
        ui->CB_stopbit->addItem(QString("1"),QSerialPort::OneStop);
        ui->CB_stopbit->addItem(QString("1.5"),QSerialPort::OneAndHalfStop);
        ui->CB_stopbit->addItem(QString("2"),QSerialPort::TwoStop);
        //流控制
        ui->CB_flowctrl->addItem("None",QSerialPort::NoFlowControl);//无
        ui->CB_flowctrl->addItem("RTS/CTS",QSerialPort::HardwareControl);//硬件控制
        ui->CB_flowctrl->addItem("XON/XOFF",QSerialPort::SoftwareControl);//软件控制
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    【5】mainwindow.ui

    在这里插入图片描述

    【6】运行效果

    在这里插入图片描述
    Love YOU
    😋😋😋😋


  • 相关阅读:
    7、传统CV之高斯滤波
    程序员基础能力系列
    【go-zero】go-zero 脚手架 simple-admin 第二章:通过goctls生成api整个项目
    【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)
    String 进阶
    使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
    Redis lua_client 伪客户端生命周期
    如何生成钱包
    sql注入总结
    哪款蓝牙耳机打电话好用?打电话用的蓝牙耳机推荐
  • 原文地址:https://blog.csdn.net/m0_45463480/article/details/125573343