5

QTextEdit t; t.setHtml(" ");改行しないスペースの代わりに、アキュートアクセント付きの小さな「a」を表示します。これは、LinuxやFreeBSDではなくWindowsでのみ発生します。これを引き起こしているのは何ですか?Windows / Qtのバグ?どうすればこれを修正できますか?

(Windows Vista x64proのQt4.5。私のロケールはデフォルトの「C」です。)

更新:これはQt / Windowsのバグだと感じています(すでにバグレポートを提出しています)。私は回避策を作成しましたが、それは醜く、フォーマットのアルゴリズムを変更し<pre> </pre>、CSSで使用して目的の出力を生成する必要があります。

より簡単な回避策はありますか?

更新:&8194; および&8195; どちらも「wcm」で提案されているように機能します。これが他のユーザーにも機能すると想定しても安全ですか? &nbsp;動作しないことはおそらくまだバグですが、&8194; 許容できる回避策のようです(?)。

更新:重要なことを見逃していたことが判明し&nbsp;ました。Qt/ Windowsでは、「ターミナル」と呼ばれる、使用していた特定のモノタイプフォントでのみ正しくレンダリングされません。「LucidaConsole」(またはその他のフォント)に切り替えると、&nbsp;正しくレンダリングされます。早く気づいたらよかった!くそ。したがって、明らかにどこかにバグがあります(おそらくQtにあります)。しかし、少なくとも私にとっては別のフォントを使用することで問題が解決したことを気にしないでください。

更新:以前考えていたように、Qtのバグではありません。正しくレンダリングされない理由を知るには、&nbsp;Tewhaの回答を参照してください。

[解決済み]

4

7 に答える 7

2

この件についてはよくわからないので、これを一粒の塩で受け取って&#160;ください。&#8194;&#8195;

私自身は QT を使用していませんが、XML/XSLT を使用して生成されたドキュメントでこの問題が発生しました。使用&#160;すると問題が解決しました。

于 2009-05-18T12:29:28.970 に答える
2

おおむね理解できたと思いますが、その「理由」を追加したいと思います。Terminal フォントは、DOS-US とも呼ばれるコード ページ 437 に基づいています。á は 160 の位置にあります。

コード ページ 437 のフォントはあまりありません。実際、TrueType フォントは Terminal だけだと思います。とにかく、昔ながらの DOS グラフィックスを明示的に表示しようとしないのであれば、Terminal を使うべきではありません。

コード ページ 437 とは何ですか? これは 1981 年頃の「ハイ ASCII」です。通常の 32 ~ 127 文字に加えて、いくつかのアクセント付き文字、物事の周りに境界線を引くためのボックス グラフィック文字、いくつかの数学記号、さらには 4 枚のカードの記号まで含まれています。しかし、世界は別の方法で動いたので、32-127 を除けば、通常は他のフォントで使用できるグリフでさえ、期待する場所にありません。ウィンドウで古いテキスト モードの MSDOS プログラムを実行している場合、コード ページ 437 フォントが使用されます。

詳細については、「コード ページ 437」(ウィキペディア) を参照してください。

于 2009-05-21T00:39:59.143 に答える
1

私の最善の推測は次のようになります: t.setHtml("<html> </html>");

t.setHtml("<html>&nbsp;</html>");
于 2009-05-11T16:04:46.093 に答える
1

アンパサンド項目をサポートしているかどうかについては、実際にはドキュメント ( here ) には何も表示されません。"&amp;"またはのような他のいくつかをテストしたい場合があり"&lt;"ます。

タグのサポートについて言及されているのでnobr、同様の効果が得られる可能性があります (タグ間のスペースです):

QTextEdit t;
t.setHtml("<nobr> </nobr>");
于 2009-05-12T11:27:48.910 に答える
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 スクリーンショット http://krsna.ca/dev/images/mdi-screenshot.png

私の推測では、これは Windows のバグです。

于 2009-05-16T04:00:11.910 に答える