c/c++语言开发共享如何使用qt5(QtQuick 2.1)及以上版本在窗口上打印度数符号

当我使用高达qt4.8(qt quick 1.1)为gui然后我成功地能够用260打印学位但是当事情升级到qt5及以上然后这停止了工作。 我在网上搜索并找到许多相关的链接,如( https://www.fileformat.info/info/unicode/char/00b0/index.htm )我试过但没有帮助。 我是否需要为usinf UTF格式包含一些库,否则问题就是其他问题。 请一些帮助。 该怎么办?

@Revised,这里描述了正在做什么。

首先,我将可打印语句存储在字符串text 。 如在cpp函数中: –

  sprintf(text, "%02d260 %03d260 ",latD, longD); QString positionText(text.c_str()); return positionText; 

然后在qml文件中使用positionText在窗口上显示。

所以,有人请回答我需要做什么才能获得学位?

谢谢。

    问题很简单你使用260最可能在Ansii C-string( const char [] )里面。 在这种情况下,Qt使用一些编解码器将其转换为Unicode字符。 出于某种原因,当您更改Qt版本时,默认编解码器已更改,这就是它停止工作的原因。

    无论如何你的方法是错误的。 你不应该使用编解码器所依赖的C字符串(通常会导致这种问题)。 您可以将QChar const定义为QChar(0260)或者最好的方法是使用tr并提供转换。

    如果你给出具有学位字符的字符串的代表性例子,那么最好有人会为你提供最好的解决方案。


    编辑:

    我会改变你的代码:

     const QChar degreeChar(0260); // octal value return QString("%1%3 %2%3").arg(latD, 2, 10, '0').arg(longD, 3, 10, '0').arg(degreeChar); 

    或添加将处理此行的翻译:

     return tr("%1degree %2degree").arg(latD, 2, 10, '0').arg(longD, 3, 10, '0'); 

    请注意,此行的此转换只需始终添加,无论当前区域设置是什么。

    尝试

     return QString::fromLatin1(text); 

    或者,如果这不起作用,另一个静态QString :: fromXXX方法。

    QT5将Qt的默认编解码器从Latin-1更改为UTF-8,如下所述: https : //www.macieira.org/blog/2012/05/source-code-must-be-utf-8-and-qstring-希望-IT /

    Latin-1和Unicode都使用1760xB00260 )作为度符号,因此您对它的使用巧合,因为它被解释为Latin-1并在Unicode中转换为相同的值。

    第一行可以改为:

     sprintf(text, "%02d302260 %03d302260 ",latD, longD); 

    如前所述,直接转到QString确实更好,但如果你必须通过std::string ,你可以简单地替换Unicode 176的UTF-8编码,其中低6位110000将有10前置,高2位10 ,将在第一个字节中加上110000 。 这变为: 302260

      以上就是c/c++开发分享如何使用qt5(QtQuick 2.1)及以上版本在窗口上打印度数符号相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562307.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐