:QML 自动换行 Linux
:QML word wrap with nbsp on Linux
我有以下问题:
当我在 Windows 上构建我的应用程序时,QML 文本确实相对于 nbsp 字符(我认为是 U+00A0)正确换行。然而,在我的 Raspberry Pi 和 Raspbian 上,nbsp 似乎被忽略了,文本被换行,就好像它只是一个普通的 space.
这里有几件事可能比较重要:
- 在 Windows 我有 QT 5.4 而在 Raspberry Pi 有 5.2
- 我觉得可能跟编码有关。问题是我记得在我强制 Pi 上的 G++ 编译器将输入文件作为 CP1250(我将 QMAKE_CXXFLAGS += -finput-charset=CP1250 添加到项目文件)之前它起作用了。好吧,由于某些字符串文字中的变音符号,我不得不进行此调整(否则文本在 raspberry 上完全损坏)。所以正如我所说,我认为在我更改此编译器开关之前自动换行已经起作用了。
但是,除了文本碰巧在不该中断的地方中断之外,任何内容的显示都没有任何问题。请注意,这里没有任何 "random" 字符或其他字符,而是一个常规的 space。这绝对是奇怪的,因为这看起来编码没有问题,而是自动换行算法 itslef。但正如我所说,当它认为字符串文字是 Linux 上的默认值(我猜是 UTF-8...)时它曾经工作过。
至于 QML 文本分配,这些字符串取自 C 数组并使用 QObject::setProperty 分配给 QML 文本,如果这很重要...
另请注意,我可能无法将源代码的编码更改为 UTF-8,因为带有字符串的文件也共享给在通信另一端工作的某些嵌入式项目,而这个项目必须是 CP1250因为 IDE.
提前致谢
编辑:
我有一些额外的信息:如果我在 Windows 上查看受影响的字符串文字之一,它实际上比在 Raspberry 上编译的相同文字更短,即使源编码设置为 CP1250。例如,nbsp 在 Windows (160d) 上仅编码为一个字节,但在 Raspberry (194d,160d) 上编码为两个字节。这很奇怪,不是吗?我希望在解释 g++ 源代码是在 CP1250 中编码之后,它应该以相同的方式对文字进行编码吗?或者可能不是,因为这是内存中字符串的编码,默认情况下在 Windows 和 Linux 上是不同的。但是我还是没看出问题出在哪里。
根据 Kevin Krammer 的建议,
QString::fromLocal8Bit()
是解决方案。
我有以下问题:
当我在 Windows 上构建我的应用程序时,QML 文本确实相对于 nbsp 字符(我认为是 U+00A0)正确换行。然而,在我的 Raspberry Pi 和 Raspbian 上,nbsp 似乎被忽略了,文本被换行,就好像它只是一个普通的 space.
这里有几件事可能比较重要:
- 在 Windows 我有 QT 5.4 而在 Raspberry Pi 有 5.2
- 我觉得可能跟编码有关。问题是我记得在我强制 Pi 上的 G++ 编译器将输入文件作为 CP1250(我将 QMAKE_CXXFLAGS += -finput-charset=CP1250 添加到项目文件)之前它起作用了。好吧,由于某些字符串文字中的变音符号,我不得不进行此调整(否则文本在 raspberry 上完全损坏)。所以正如我所说,我认为在我更改此编译器开关之前自动换行已经起作用了。
但是,除了文本碰巧在不该中断的地方中断之外,任何内容的显示都没有任何问题。请注意,这里没有任何 "random" 字符或其他字符,而是一个常规的 space。这绝对是奇怪的,因为这看起来编码没有问题,而是自动换行算法 itslef。但正如我所说,当它认为字符串文字是 Linux 上的默认值(我猜是 UTF-8...)时它曾经工作过。
至于 QML 文本分配,这些字符串取自 C 数组并使用 QObject::setProperty 分配给 QML 文本,如果这很重要...
另请注意,我可能无法将源代码的编码更改为 UTF-8,因为带有字符串的文件也共享给在通信另一端工作的某些嵌入式项目,而这个项目必须是 CP1250因为 IDE.
提前致谢
编辑: 我有一些额外的信息:如果我在 Windows 上查看受影响的字符串文字之一,它实际上比在 Raspberry 上编译的相同文字更短,即使源编码设置为 CP1250。例如,nbsp 在 Windows (160d) 上仅编码为一个字节,但在 Raspberry (194d,160d) 上编码为两个字节。这很奇怪,不是吗?我希望在解释 g++ 源代码是在 CP1250 中编码之后,它应该以相同的方式对文字进行编码吗?或者可能不是,因为这是内存中字符串的编码,默认情况下在 Windows 和 Linux 上是不同的。但是我还是没看出问题出在哪里。
根据 Kevin Krammer 的建议,
QString::fromLocal8Bit()
是解决方案。