4

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

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

首先,我将可打印语句存储在 string 中text。与 cpp 函数一样:-

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

                 QString positionText(text.c_str());
                 return positionText;     

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

那么,有人请回答我需要做什么才能获得展示学位?

谢谢。

4

4 回答 4

8

问题很简单,您\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');

请注意,无论当前语言环境是什么,都必须始终添加此行的此翻译。

于 2013-09-12T08:23:25.740 回答
3

尝试

return QString::fromLatin1(text);

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

于 2013-09-12T09:42:05.660 回答
1

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

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

第一行可以更改为:

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

如前所述,直接进入 QString 确实更好,但如果你必须通过 a std::string,你可以简单地替换 Unicode 176 的 UTF-8 编码,其中低 6 位110000将有一个10前置,高 2 bits 10,会110000在第一个字节之前添加。这变成: \302\260

于 2018-08-23T20:32:16.063 回答
0

要在控制台中轻松打印带有度数符号的角度,请尝试以下操作:

#include <QDebug>
double v = 7.0589;
qDebug().noquote() << "value=" << v << QString(248);

控制台输出:

value= 7.0589 °

这在 Windows 下开箱即用。

于 2021-12-07T15:25:14.177 回答