问题描述

在用QT5编译程序的时候,出现程序动态设置的文字是乱码的,UI固定设置的文字是正常显示的.

这种情况,一般是编码设置有问题.

环境描述

  • QT版本:QT5.9.9
  • 编译环境:VS2017

解决方案

设置代码为UTF-8模式

在打开Qt5工程的情况下,依次点击工具->选项->文本编辑器->行为,找到文件编码,更改默认编码为 “UTF-8”,UTF-8 BOM更改为"如果编码是UTF-8则添加"

添加代码

在类的头文件中添加入如下代码:

 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
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

运行效果:
![](https://raw.githubusercontent.com/guoqiangx/blog-images/master/img/20220325113403.png)

# 完整代码

```C++
#ifndef DIALOG_H
#define DIALOG_H
//在VS编译环境,防止中文乱码
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
#include <QDialog>
#include <QSerialPort>
#include <QSerialPortInfo>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void on_btn_uart_Ctrl_clicked();
    void on_btn_led1_Ctrl_clicked();
    void on_btn_led2_Ctrl_clicked();
    void on_btn_clear_clicked();
    void on_cbb_baud_currentIndexChanged(const QString &arg1);
    void on_btn_serch_clicked();
    void serialPort_readyRead();        //connect连接方式,串口接收的数据进行处理
    void on_btn_send_clicked();

private:
    Ui::Dialog *ui;

    QSerialPort serial;

};

#endif // DIALOG_H