QTextEdit t; t.setHtml(" ");
会显示一个带有锐音的小'a',而不是一个不间断的空格。这种情况只发生在Windows而不是Linux或FreeBSD上。
可能是什么导致了这个? Windows / Qt中的错误?我该如何解决这个问题?
(Windows Vista x64 pro上的Qt 4.5。我的语言环境是默认的'C'。)
更新:我觉得这是Qt / Windows中的错误(已经提交了错误报告)。我已经创建了一个解决方法,但它很丑陋并且涉及更改我的格式化算法并使用<pre> </pre>
和CSS来生成所需的输出。
有没有更简单的解决方法?
更新:&amp; 8194;和&amp; 8195;两者都按'wcm'的建议工作。假设这对其他用户也有效是否安全?
无效可能仍然是一个错误,但&amp; 8194;似乎是一种可接受的解决方法(?)。
更新:事实证明我错过了一些重要的事情:Qt / Windows中的
仅使用我所使用的称为“终端”的特定字体字体呈现错误。当我切换到'Lucida Console'(或任何其他字体)
正确呈现时!男人,我希望我早些时候注意到这一点!该死的。所以很明显在某处有一个bug(最有可能在Qt中)。但是没关系,至少对我来说使用不同的字体已经解决了这个问题。
更新:这不是我以前认为的Qt中的错误。
要了解
被错误渲染的原因,请参阅Tewha的答案。
[解决]
答案 0 :(得分:2)
对这个主题不太了解,所以请稍等一下,但是你尝过了 
或 
或 
之类的unicode变体吗? / p>
我自己不使用QT,但是我遇到了使用XML / XSLT生成的一些文档的问题。使用 
为我解决了这个问题。
答案 1 :(得分:2)
我看到你大部分都想到了这一点,但我想我会加上它的“原因”。终端字体基于代码页437,也称为DOS-US。 á位于第160位。
代码页437的字体不多。我认为终端是唯一的TrueType,事实上!无论如何,如果你没有明确地尝试显示旧学校的DOS图形,你就不应该使用终端。
什么是代码页437?它是“高ASCII”,大约1981年。除了通常的32-127个字符外,它还包括一些重音字母,用于绘制事物边框的方框图形字符,一些数学符号甚至是四种卡片的符号!但是世界以不同的方式移动,所以除了32-127之外,即使是其他字体中通常可用的字形也不是你所期望的那样。如果您在窗口中运行旧的文本模式MSDOS程序,它将使用代码页437字体。
有关详细信息,请参阅“code page 437”(维基百科)。
答案 2 :(得分:1)
我最好的猜测是:t.setHtml(“&lt; html&gt;&amp; nbsp;&lt; / html&gt;”);
t.setHtml("<html> </html>");
答案 3 :(得分:1)
我实际上无法在文档(here)中看到它是否支持&符号项目。您可能希望测试其他一些内容,例如"&"
或"<"
。
提及对nobr
标记的支持,因此您可以获得类似的效果(这些标记之间的空格):
QTextEdit t;
t.setHtml("<nobr> </nobr>");
答案 4 :(得分:1)
我使用Qt 4.5.0在Mac上对此进行了测试。不间断的空间实体与其他实体一起完美地工作。我所做的就是修改Qt 4附带的MDI示例项目中的源代码。
MdiChild继承了QTextEdit,所以在mdichild.cpp中,我在构造函数中添加了setHtml()
调用:
mdichild.cpp http://krsna.ca/dev/images/mdichild.png
这产生了以下QTextEdit,包含所有实体,包括不间断的空格:
MDI Screenshot http://krsna.ca/dev/images/mdi-screenshot.png
我的猜测是这是一个Windows错误。
答案 5 :(得分:1)
我使用Qt 4.5.0在Windows XP SP3 x32下测试它,它按预期工作。 不确定它是否可能是您的Windows语言环境或x64特定错误的问题,尽管我对此表示怀疑。
答案 6 :(得分:0)
我会考虑做类似的事情来创建在QtextEdit(或QTextBrowser)中工作的空格:
QString msg = "Some Text with 3 Whitespaces";
msg.replace(" "," ");
然后,所有空格都会被html代码&amp; nbsp;取代(硬编码的空白) 这对我很有用。
编辑:对不起,这只适用于以下内容:
msg.prepend("<font></font>");
我不明白为什么(标签已关闭,所以它有意义吗?)也许有人想解释它......