如何使用qt5(QtQuick 2.1)及以上版本在窗口上打印度数符号

zea*_*eal 3 c c++ qt utf qml

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

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

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

                 sprintf(text, "%02d\260  %03d\260 ",latD, longD);

                 QString positionText(text.c_str());
                 return positionText;     
Run Code Online (Sandbox Code Playgroud)

然后使用positionTextqml文件在窗口上显示.

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

谢谢.

Mar*_*k R 6

\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);
Run Code Online (Sandbox Code Playgroud)

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

return tr("%1degree  %2degree").arg(latD, 2, 10, '0').arg(longD, 3, 10, '0');
Run Code Online (Sandbox Code Playgroud)

请注意,此行的此转换只需要始终不添加当前区域设置.