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

How to print degree symbol on the window using qt5(QtQuick 2.1) and above

本文关键字:窗口 版本 打印 符号 QtQuick qt5 何使用 高版本      更新时间:2023-10-16

当我使用 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, "%02d260  %03d260 ",latD, longD);
                 QString positionText(text.c_str());
                 return positionText;     

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

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

谢谢。

问题很简单,你很可能在 Ansii C 字符串 ( const char [] 260 中使用)。在这种情况下,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-wants-it/

Latin-1 和 Unicode 都使用 1760xB00260 )作为度数符号,所以你对它的使用巧合地起作用了,因为它被解释为 Latin-1 并在 Unicode 中转换为相同的值。

第一行可以更改为:

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

如前所述,直接进入QString确实更好,但是如果你必须通过一个std::string,你可以简单地替换Unicode 176的UTF-8编码,其中较低的6位110000将有一个10前置,而10的高2位将110000在第一个字节中预置。 这就变成了:302260 .

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

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

控制台输出:

value= 7.0589 °

这在Windows下开箱即用。