• 1914阅读
  • 7回复

想问一下Qt 如何把16进制的unicode码转换为汉字显示 [复制链接]

上一主题 下一主题
离线nokia-plus
 

只看楼主 倒序阅读 楼主  发表于: 2022-01-02
各位大神好

我用的4.7.4版本QT

如何把0x738b对应的汉字“测”在QLabel显示出来
又如何把“测”转化为16进制数字

http://www.qtcn.org/bbs/read-htm-tid-55729-fpage-4.html
这个帖子推荐的用这个QString::fromLocal8Bit()

但是我这个工程一直提示函数没声明


newItem[column].setText(QString::fromLocal8Bit(strtemp));

518: 错误:no matching function for call to 'QString::fromLocal8Bit(QString&)'
离线20091001753

只看该作者 1楼 发表于: 2022-01-02
用什么数字,多长的数字,来映射一个字符,实际上是文字编码决定的。

至于你说的 0x738b 映射 测 这个字,应该是不对的,因为常见的编码如下:


网站:https://www.qqxiuzi.cn/bianma/zifuji.php

总之你要注意几个地方:
首先,你要确定,你到底是用什么文字编码。
其次,文字编码 涉及 “源码文字编码”、“运行时文字编码”;而前者 Qt5 开始强制源码使用 utf8 编码。
最后,QString::fromLocal8Bit 是存在问题的:不同系统对本地文字编码的定义是不同的。
例如 linux 系统是 utf8 ,而 windows 系统的本地编码,取决于你所安装的语言,中文系统就是 GBK 编码。
(づ ̄ 3 ̄)づ
离线nokia-plus

只看该作者 2楼 发表于: 2022-01-03
回 20091001753 的帖子
20091001753:用什么数字,多长的数字,来映射一个字符,实际上是文字编码决定的。
至于你说的 0x738b 映射 测 这个字,应该是不对的,因为常见的编码如下:
[图片]
....... (2022-01-02 23:48) 

感谢大神,不好意思啊,这个举例编码我搞错了,我这是gbk编码的,我就是想把编码的内码转换成文字在文本框里显示出来,转换的方法还没找到,想问一下如何将string中的B2E2 转换成“测”字显示出来
离线20091001753

只看该作者 3楼 发表于: 2022-01-04
Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。

Qt4 因为长期没使用了,所以具体忘了。

Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
Qt4 与 Qt5 都使用 QTextCodec 来经行编码之间的转换。
所以 QTextCodec 就是你要找的答案。

而 Qt6 废弃了 QTextCodec,而是换用了其他类来处理,具体怎么弄,我也还没接触。
我目前坚守在 Qt5.15.2
(づ ̄ 3 ̄)づ
离线liudianwu

只看该作者 4楼 发表于: 2022-01-04
回 20091001753 的帖子
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

QTextCodec没有废弃,移到了core5compat模块,你需要 QT+=core5compat
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liudianwu

只看该作者 5楼 发表于: 2022-01-04
回 20091001753 的帖子
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

确切的说是 greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liudianwu

只看该作者 6楼 发表于: 2022-01-04
回 20091001753 的帖子
20091001753:Qt4 Qt5 Qt6 对字符编码的编程规范是不一样的,更准确来说,是越来越合理了。
Qt4 因为长期没使用了,所以具体忘了。
Qt5 比 Qt4 的改进在于:强制源码使用 utf8,强制 QString 使用 unicode 编码。
....... (2022-01-04 01:45) 

虾米大佬光顾着给qt武林秘籍比如升级到qt6血泪经验篇点赞,而没有去看具体内容
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线yuyu414

只看该作者 7楼 发表于: 2022-01-04
你们说了这么多都没搞清楚楼主要的是什么。
/**
* @brief fromUnicodeString
* "\uxxxx\uxxxx"转换为QString
* @param text
* @return  
*/
QString fromUnicodeString(const QString &text)
{
    QString result;
    QStringList list = text.split(R"(\u)", Qt::SkipEmptyParts);
    for (int i = 0; i < list.size(); ++i) {
        QString str = list.at(i);
        QChar c(str.toInt(nullptr, 16));
        result.append(c);
    }
    return result;
}
本帖提到的人: @return
快速回复
限100 字节
 
上一个 下一个