Qt4 QTextEdit中未正确显示非打断空格

Qt4 QTextEdit中未正确显示非打断空格,qt4,Qt4,qtexditt;t、 setHtml(“”)显示带有尖锐重音的小“a”,而不是不间断的空格。这只发生在Windows上,而不是Linux或FreeBSD上。 这可能是什么原因造成的?Windows/Qt中的一个bug?我怎样才能解决这个问题 (Windows Vista x64 pro上的Qt 4.5。我的语言环境是默认的“C”。) 更新:我感觉这是Qt/Windows中的错误(已经提交了错误报告)。我已经创建了一个解决方案,但它很难看,需要改变我的格式,并使用CSS的生成所需的输出 t.se

qtexditt;t、 setHtml(“”)显示带有尖锐重音的小“a”,而不是不间断的空格。这只发生在Windows上,而不是Linux或FreeBSD上。
这可能是什么原因造成的?Windows/Qt中的一个bug?我怎样才能解决这个问题

(Windows Vista x64 pro上的Qt 4.5。我的语言环境是默认的“C”。)

更新:我感觉这是Qt/Windows中的错误(已经提交了错误报告)。我已经创建了一个解决方案,但它很难看,需要改变我的格式,并使用CSS的
生成所需的输出

t.setHtml("<html>&nbsp;</html>");
有没有更简单的解决办法

更新:&8194;和8195英镑;这两项工作都按照“wcm”的建议进行。假设这也适用于其他用户,安全吗?
不工作可能仍然是一个bug,但是&8194;似乎是可接受的解决方法(?)

更新:结果发现我遗漏了一些重要的东西:
在Qt/Windows中,只有使用了我使用的名为“Terminal”的特定单字体,才会错误地渲染。当我切换到“Lucida Console”(或任何其他字体)时,
正确渲染!伙计,我真希望我早点注意到这一点!该死所以很明显,某个地方有一个bug(很可能是在Qt中)。但无论如何,至少对我来说,使用不同的字体解决了这个问题

更新:这不是我以前认为的Qt中的错误。 要了解
呈现错误的原因,请参阅Tewha的答案


[已解决]

我最好的猜测是:t.setHtml(“”)

t.setHtml(“”);

我在文档()中看不到它是否支持符号和项目。您可能需要测试其他一些,如
“&;”

这里提到了对
nobr
标记的支持,因此您可以使用(这些标记之间有一个空格)获得类似的效果:

qtexditt;
t、 setHtml(“”);

我使用Qt4.5.0在Mac上进行了测试。非中断空间实体与其他实体一起工作得非常好。我所做的只是修改Qt4附带的MDI示例项目中的源代码

MdiChild继承QTextEdit,因此在MdiChild.cpp中,我在构造函数中添加了
setHtml()
调用:

生成以下QTextEdit,包括所有实体,包括非打断空格:


我的猜测是这是一个Windows bug。

对这个主题不太了解,所以对此持保留态度,但您是否尝试过unicode变体,如
 


我自己不使用QT,但我在使用XML/XSLT生成的一些文档中遇到了这个问题。使用
和#160为我解决了这个问题。

我在WindowsXPSP3X32下使用Qt4.5.0对它进行了测试,结果与预期的一样。
我不确定这是否是您的Windows区域设置的问题或x64特定的错误,尽管我对此表示怀疑。

我知道您已经大致了解了这一点,但我想我应该添加“为什么”一词。终端字体基于代码页437,即DOS-US。他在第160位

代码页437的字体不多。事实上,我认为Terminal是唯一的TrueType!无论如何,若你们并没有明确地试图显示老式的DOS图形,你们就不应该使用终端

代码页437是关于什么的?大约是1981年的“高ASCII”。除了通常的32-127个字符外,它还包括一些重音字母、用于在事物周围画边框的方框图形字符、一些数学符号,甚至四套卡片的符号!但是世界的发展方向不同,所以除了32-127之外,即使是通常在其他字体中可用的字形也不是你所期望的那样。如果您在窗口中运行旧的文本模式MSDOS程序,它将使用代码页437字体


请参阅“(维基百科)以获取更多信息。

< P>我会考虑这样做来创建在QTEXTEDIT(或QTrExButter)中工作的空白:

然后,所有空白将被html代码替换;(硬编码空格) 这对我很有效

编辑:抱歉,这仅适用于以下情况:

msg.prepend(“”);

我不明白为什么(标签是闭合的,有意义吗?)也许有人想解释一下…

没有,这也会给出相同的重音“a”。此外,我尝试了不同版本的Qt,从4.3到4.5.1,所有版本都有相同的问题。>您可能想测试其他一些版本,如“&;”或“”。是的,这些都很好。顺便说一句,我想知道问题是否发生在Macosx上,但我没有访问Mac来测试它。谢谢你的意见。是的,看起来这个bug只存在于Windows版本中。我已经提交了一个bug报告,希望他们能在新版本中修复它。我也在XP SP2(32位)上尝试过,它给出了相同(不正确)的输出。我不知道,也许我做错了什么……我试过了 ;以前没有成功。但是,两者   工作谢谢!假设 / 也能在其他计算机上工作,安全吗?你认为是什么导致了这种行为?我对i18n/unicode的东西不是很了解,我很确定我没有弄乱语言环境或类似的东西。老实说,我不知道其他系统中的8194或8195。我几乎在微软世界工作:(对不起,这是否意味着我得到了赏金?是的,但我没有看到任何选择答案或提交赏金的选项(是因为我的用户分数低吗?)。wcm,will&819(4/5);与其他用户合作(说英语)也运行Windows的计算机?Tewha,谢谢你的澄清。现在已经非常清楚了。非常感谢!
QTextEdit t;
t.setHtml("<nobr> </nobr>");
QString msg = "Some   Text   with  3   Whitespaces";
msg.replace(" ","&nbsp;");
msg.prepend("<font></font>");