嵌入式下Qt的中文显示

不管是以前接触的winCE系统还是现在的Linux,用Qt都会碰到显示中文的问题。首先显示框框是没有字库,显示乱码才是编码的问题

没有字库的话,在对应的目录里加入字库就行,显示乱码就要在程序里面设置下:

Qt的QTextCodec是专门用于文字编码的

1.

    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

这里设置了本地编码为GBK,不过我设置GBK18030却是乱码,这两个的标准可能还不一样,所以如果GBK显示乱码,可以试试UTF-8,总之是其中一个


2.如果是接收的是GBK编码的二进制码,则需要用宽字节QChar来存储,将一个汉字编码的2个字节存到一个QChar中,可以通过fromUnicode转成string显示


将Qt国际化也总结在这里:

Qt的国际化是通过Qtranslate这个类来实现的,具体怎么做网上也有很多例子,这里就简单说一下好了,主要是以下几步

注意:在代码中将你想要国际化的地方用tr("")来实现

1、在.pro文件中添加支持

TRANSLATIONS=english.ts
需要切换几种语言就要有几个ts文件,建议源码中最好是用英文,因为中文的那些编码问题搞来搞去很是头疼
2、用命令行进入工程所在目录输入
lupdate ***.pro
就会在工程目录下生成一个english.ts的文件
3、用Qt自带的工具Linguist打开,将里面的英文替换成对应的中文,或者可以用Editplus等文件编辑工具打开,ts文件是xml形式的,很容易看懂
4、改好后,在命令行中输入
lrelease english.ts
就会在目录下生成一个english.qm的文件,在代码中加入
    QTranslator myappTranslator;
    if(!myappTranslator.load(":/english.qm"))
        qDebug("load error ");
    a.installTranslator(&myappTranslator);

如果想切换别的语言,就需要编辑对应的ts文件
### 嵌入式Linux环境下Qt显示中文乱码解决方案 在嵌入式Linux环境中,如果遇到Qt应用中的中文字符显示乱码的情况,可能的原因主要包括字体支持不足、编码设置不正确以及环境变量配置不当等问题。以下是针对该问题的具体分析和解决办法: #### 字体支持 确保目标设备上有适合的中文字体文件,并将其加载到Qt的应用程序中。可以通过以下方式实现: 1. 将所需的中文字体(如SimSun.ttc或其他常见中文字体)复制到目标板上的指定目录。 2. 修改`fontconfig`配置文件或通过代码动态注册字体[^3]。 ```cpp QFontDatabase::addApplicationFont("/path/to/SimSun.ttf"); ``` 上述代码可以用来向应用程序添加自定义字体文件。 #### 编码设置 确认源代码文件保存时使用的编码格式是否统一为UTF-8无BOM格式。此外,在读取外部资源(如文本文件或数据库数据)时也需要保证其编码一致性。对于字符串处理部分,建议显式转换编码以避免潜在错误[^4]。 ```cpp QString str = QString::fromUtf8("你好世界"); ``` 此示例展示了如何将UTF-8编码的数据转化为内部表示形式以便于后续操作。 #### 环境变量调整 适当设置一些影响国际化行为的关键环境变量可以帮助改善多语言支持效果。例如: - `LANG`: 定义整个系统的默认区域选项; - `LC_ALL`: 覆盖所有其他本地化参数; - `QT_IM_MODULE`: 指定输入法模块名称; 具体命令如下所示[^5]: ```bash export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 export QT_IM_MODULE=qtvirtualkeyboard ``` 执行以上指令后重启相关服务或者重新启动会话使更改生效。 #### 测试验证 完成上述步骤之后构建项目并部署至实际硬件平台之上进行测试观察现象是否有改观。如果仍然存在问题,则进一步排查是否存在遗漏之处或者是特定场景下的特殊需求未满足情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值