如何使用qt5(QtQuick 2.1)及更高版本在窗口上打印度数符号
How to print degree symbol on the window using qt5(QtQuick 2.1) and above
当我使用 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 都使用 176
(0xB0
或 0260
)作为度数符号,所以你对它的使用巧合地起作用了,因为它被解释为 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下开箱即用。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 导入库可以跨dll版本工作吗
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 不同的Visual Studio版本中缺少.dll
- 处理闪烁窗口事件
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- 窗口如何处理加载两个不同版本的 DLL
- 如何使用qt5(QtQuick 2.1)及更高版本在窗口上打印度数符号
- 如何使用Xregister和CertEnroll创建"Certificate Signing Request"在所有版本的窗口上运行?
- WINAPI -窗口显示在调试版本中,而不是在发布版本中