Vampireyifeng 发表于 2014-11-2 09:21:20

qt写的串口调试软件中文乱码和无法自动检测串口号的问题

本帖最后由 Vampireyifeng 于 2014-11-2 10:50 编辑

rt,刚学了几天的c++和qt,参照网上开源串口调试软件写的一个串口调试软件,想着以后串口调试就用这个,不过遇到了中文乱码的问题,而且无法自动检测串口号用的是qextserialport开源串口类,串口接收发送什么的都正常。
开发环境Qt 5.3.1在vs2010+qt creator上也会出现中文乱码。控件的名字如果是在gui开发环境下设定就不会乱码用tr()就会出现乱码。{:cry:}



didadida 发表于 2014-11-2 09:31:14

编码方式改成这个试试
QTextCodec *codec = QTextCodec::codecForName("system");

youthdou 发表于 2014-11-2 09:38:46

你用的qt的版本?Qt已经集成了串口库

Vampireyifeng 发表于 2014-11-2 11:05:04

didadida 发表于 2014-11-2 09:31
编码方式改成这个试试
QTextCodec *codec = QTextCodec::codecForName("system");

还 是不 行,不过谢谢

lyxer 发表于 2014-11-2 11:08:44

刚想学QT win下和linux都已搭好环境 楼主学了多长时间啊

ysu533 发表于 2014-11-2 11:10:44

本帖最后由 ysu533 于 2014-11-2 11:34 编辑

Vampireyifeng 发表于 2014-11-2 11:05
还 是不 行,不过谢谢

QString::fromLoacal8bit("波特率"); 这样应该是中文. 但是这样在非中文的系统下可能会有问题. 更好的做法, 参见楼下

Vampireyifeng 发表于 2014-11-2 11:16:33

lyxer 发表于 2014-11-2 11:08
刚想学QT win下和linux都已搭好环境 楼主学了多长时间啊

刚开始也就4,5天{:biggrin:}

lyxer 发表于 2014-11-2 11:18:19

Vampireyifeng 发表于 2014-11-2 11:16
刚开始也就4,5天

你这是要逆天啊 {:dizzy:}

ysu533 发表于 2014-11-2 11:31:59

乱码很好解决. 几条思路.
1: tr() 如果你不想国际化(多语言), 那么就不要用tr, 使用QString::fromLocal8Bit()(如果源文件是ANSI编码), QString::fromUtf8()(如果源文件是UTF-8编码, 推荐这个). QStringLiteral()之类的.
2: 如果要国际化, 即使用了tr, 那么强烈推荐源文件中不要使用中文, 只使用英文. 由英文翻译成别的语言是更多通用的做法. 而且这样做还有一个问题由Desinger, ui文件自己生成的源文件里面的中文字符是转义字符. 翻译很麻烦(类似\0x85\0x86之类的).
3: 鉴于以上两点, 不管您用不用tr, 考不考虑国际化. 推荐使用utf-8编码. 但是MS对utf的支持不太好.
VC2010 的话, 需要文件保存为带BOM 的utf-8编码. 然后源文件中包含杂注 #pragma execution_character_set("utf-8")
vc2013的话, 只需要保存为带bom的UTF-8编码即可. 无需包含杂注.
vc2012的话. 以上两种都不行, 我的做法就是不用vc2012, 或者是全英文代码, 然后ANSI编码
其它版本的vc没用过, 具体未知.

Vampireyifeng 发表于 2014-11-2 11:37:32

ysu533 发表于 2014-11-2 11:31
乱码很好解决. 几条思路.
1: tr() 如果你不想国际化(多语言), 那么就不要用tr, 使用QString::fromLocal8Bit ...

谢谢,本来不想用QString::fromLocal8Bit,看来我还是老老实实的用 QString::fromLocal8Bit()吧{:biggrin:}

ysu533 发表于 2014-11-2 11:37:43

lyxer 发表于 2014-11-2 11:18
你这是要逆天啊

Qt很好学.如果你基本功扎实(C++, 操作系统本身编程相关的概念比较了解), 看Qt,1-3天完全能写出一个看起来比较像样的程序. Qt文档相当的不错

ysu533 发表于 2014-11-2 11:40:24

Vampireyifeng 发表于 2014-11-2 11:37
谢谢,本来不想用QString::fromLocal8Bit,看来我还是老老实实的用 QString::fromLocal8Bit()吧{:biggr ...

还是utf-8更方便. 更具移植性. 转换很方便的. 如果有不明的地方可以问下. 我可以简单写个教程. 推广Qt{:lol:}

simonxiao 发表于 2014-11-2 12:56:12

楼上就做个QT推广大使吧:){:lol:}期待!

Vampireyifeng 发表于 2014-11-2 12:59:09

ysu533 发表于 2014-11-2 11:37
Qt很好学.如果你基本功扎实(C++, 操作系统本身编程相关的概念比较了解), 看Qt,1-3天完全能写出一个看起来 ...

是的,{:biggrin:}

Vampireyifeng 发表于 2014-11-2 13:00:28

ysu533 发表于 2014-11-2 11:40
还是utf-8更方便. 更具移植性. 转换很方便的. 如果有不明的地方可以问下. 我可以简单写个教程. 推广Qt{:l ...

支持,用QString::fromLocal8Bit的话,qmessage里的中文还是乱码的

eye 发表于 2014-11-2 14:00:51

既然都用了Qt5.3.2,
就直接用库里的标准串口类吧,
QSerialPort,好用多了。

qextserialport都是多少年前的东西了。

ysu533 发表于 2014-11-2 14:21:45

simonxiao 发表于 2014-11-2 12:56
楼上就做个QT推广大使吧:)期待!

录了两个短视频, 第一次录, 不怎么会用. 结果第一个工程录完, 录第二个工程, 录完,发现第一个工程的视频没了, 又重新录了一遍第一个工程






后面两个附件分卷压缩了, 请去掉001 002后面的.zip再解压

ysu533 发表于 2014-11-2 14:24:50

Vampireyifeng 发表于 2014-11-2 13:00
支持,用QString::fromLocal8Bit的话,qmessage里的中文还是乱码的

可能你其它有不对的地方. 参看我17楼的视频

Vampireyifeng 发表于 2014-11-2 16:00:50

ysu533 发表于 2014-11-2 14:21
录了两个短视频, 第一次录, 不怎么会用. 结果第一个工程录完, 录第二个工程, 录完,发现第一个工程的视频 ...

谢谢,非常感谢,解决了,教程录的很好。话说你是怎么找到方法的呢?我 没有查官方文档。在网上搜都解决不了

usecool 发表于 2014-11-2 20:51:50

直接使用英文,然后用多语言文件来解决。这样就没有乱码了,原因的话,上面的9楼的 很详细。
使用QTranslator类,QCoreApplication::installTranslator加载翻译文件,qt带的工具Linguist来制作翻译文件。

ysu533 发表于 2014-11-3 08:37:27

本帖最后由 ysu533 于 2014-11-3 08:38 编辑

Vampireyifeng 发表于 2014-11-2 16:00
谢谢,非常感谢,解决了,教程录的很好。话说你是怎么找到方法的呢?我 没有查官方文档。在网上搜都解决 ...

这个一个靠知识的系统性(这个对于大多数人都, 包括我自己都是欠缺的). 另一个就是积累. 同样的一个问题, 大家在网上搜索到的同一个答案. 有的人马上就能解决手中问题, 而且以后相同或相类似的问题都能解决. 有的能解决当前问题, 但是以后碰到相类似问题又不知道怎么解决了.
有的根本就无解. 这个和自身积累(趋向系统性)有关. 不过这个都没关系. 慢慢来碰到的问题都会解决的. 慢慢的也会知其所以然.

还记得自己第一次发布Qt程序, 折腾了一晚上, 最后在别的机子上能够成功运行(公司其它测试机, 一开始只能在自己机子上运行). 结果到客户那, 有运行不了了. 最后不得已在客户的机子上安装了个qt的开发环境. 不过后面也知道到底是为什么了, 出现类似问题怎么解决.

你刚开始就写这么完整的程序. 比我那时候厉害多了.

yangwc 发表于 2014-11-3 08:47:54

eye 发表于 2014-11-2 14:00
既然都用了Qt5.3.2,
就直接用库里的标准串口类吧,
QSerialPort,好用多了。


今天才知道QT5.3.2有标准串口类,赶紧装个试试看。

yixin1851 发表于 2014-11-3 09:10:28

ysu533 发表于 2014-11-3 08:37
这个一个靠知识的系统性(这个对于大多数人都, 包括我自己都是欠缺的). 另一个就是积累. 同样的一个问题,...

搞Qt的还挺多的啊

ysu533 发表于 2014-11-3 09:24:36

yangwc 发表于 2014-11-3 08:47
今天才知道QT5.3.2有标准串口类,赶紧装个试试看。

这个其实qt4就有了, 其前身就是QtSerialDevice, 在www.qt-apps.org, 有这个项目. 快出qt5的时候(还没有推出时), 作者说要合并进Qt5, 所以以后不会更新了.

其实他和qextserialport是有一定的渊源的. 我觉得如果硬实时性比较高, 要分(断)包的还是自己写合适些.

simonxiao 发表于 2014-11-3 11:22:38

ysu533 发表于 2014-11-2 14:21
录了两个短视频, 第一次录, 不怎么会用. 结果第一个工程录完, 录第二个工程, 录完,发现第一个工程的视频 ...

ysu533是个热心人啊,谢谢!

顺便问一下楼主,ARM9 240M左右的主频,跑QT4是否合适?会不会比较慢?当然系统对实时性要求不是太高,主要就是串口数据9600bps能及时处理就可以了。

再次感谢哦:)

ysu533 发表于 2014-11-3 11:28:30

simonxiao 发表于 2014-11-3 11:22
ysu533是个热心人啊,谢谢!

顺便问一下楼主,ARM9 240M左右的主频,跑QT4是否合适?会不会比较慢?当然 ...

ARM9 没玩过. 我这几年工作主要是软件. PC平台的那种. 嵌入式平台不熟. 但是你的问题, 处理串口数据本身是没有问题的, 如果有问题那是代码写的有问题. 这个是和Qt无关的. 至于Qt的UI能否跑流畅, 没玩过不敢乱说.

Vampireyifeng 发表于 2014-11-3 11:56:24

ysu533 发表于 2014-11-3 11:28
ARM9 没玩过. 我这几年工作主要是软件. PC平台的那种. 嵌入式平台不熟. 但是你的问题, 处理串口数据本身 ...

arm9如果跑gui的话,跑qt还是不错的,我手上的一块zlg的imx283就被我刷成了qt的,我学qt也是为了 在arm9上运行的。

百果 发表于 2014-11-3 12:40:19

我也用QserialPort
很好用呢。
{:lol:}

simonxiao 发表于 2014-11-3 14:36:11

Vampireyifeng 发表于 2014-11-3 11:56
arm9如果跑gui的话,跑qt还是不错的,我手上的一块zlg的imx283就被我刷成了qt的,我学qt也是为了 在arm9 ...

恩,楼主你现在的QT5就是跑在i.mx283上的吧。i.mx283的主频过400M,应该是没有问题。我手上的新唐板子最高才200多{:sad:}

Felix257 发表于 2015-9-25 13:45:07

都是大神啊
页: [1]
查看完整版本: qt写的串口调试软件中文乱码和无法自动检测串口号的问题