неразрывный пробел не отображается правильно в QTextEdit - PullRequest
4 голосов
/ 09 мая 2009

QTextEdit t; t.setHtml(" "); отображает маленькое «а» с острым акцентом вместо неразрывного пробела. Это происходит только в Windows, а не в Linux или FreeBSD. Что может быть причиной этого? Ошибка в Windows / Qt? Как я могу это исправить?

(Qt 4.5 в Windows Vista x64 pro. Моя локаль по умолчанию 'C'.)

Обновление: у меня такое ощущение, что это ошибка в Qt / Windows (уже отправлено сообщение об ошибке). Я создал обходной путь, но он уродлив и требует изменения моего форматирующего алогрита и использует с CSS для получения желаемого результата.

Есть ли более простой обходной путь?

Обновление: & 8194; и & 8195; оба работают в соответствии с предложением wcm. Можно ли предположить, что это будет работать и для других пользователей?   не работает, вероятно, все еще ошибка, но & 8194; кажется приемлемым решением (?).

Обновление: Оказывается, я упустил что-то важное:   в Qt / Windows рендерится некорректно только с тем шрифтом монотипии, который я использовал, который называется 'Terminal'. Когда я переключился на 'Lucida Console' (или любой другой шрифт в этом отношении)   рендерился правильно! Человек, я хотел бы, чтобы я заметил это раньше! Черт. Очевидно, что где-то есть ошибка (скорее всего, в Qt). Но не берите в голову, что по крайней мере для меня использование другого шрифта решило проблему.

Обновление: это не ошибка в Qt, как я думал ранее. Чтобы узнать причину, по которой   отображается неправильно, см. Ответ Тевхи.

[решаемые]

Ответы [ 7 ]

2 голосов
/ 21 мая 2009

Я вижу, вы, в основном, поняли это, но я подумал, что добавлю «почему». Шрифт Terminal основан на кодовой странице 437, также известной как DOS-US. в позиции 160.

Для кодовой страницы 437 не так много шрифтов. Я думаю, что Terminal - единственный TrueType! В любом случае, если вы явно не пытаетесь отображать графику DOS старой школы, вам не следует использовать терминал.

Что такое кодовая страница 437? Это «высокий ASCII», около 1981 года. В дополнение к обычным 32-127 символам, он включает в себя несколько акцентированных букв, графические символы в прямоугольниках для рисования границ вокруг предметов, некоторые математические символы и даже символы для четырех мастей карт! Но мир изменился другим путем, поэтому, кроме 32-127, даже глифы, которые обычно доступны в других шрифтах, не там, где вы их ожидаете. Если вы запускаете в окне старую текстовую программу MSDOS, она будет использовать шрифт кодовой страницы 437.

См. " кодовая страница 437 " (Википедия) для получения дополнительной информации.

2 голосов
/ 18 мая 2009

Не знаю много о предмете, так что принимайте это с крошкой соли, но вы пробовали один из вариантов Unicode, таких как   или   или  ?

Я сам не пользуюсь QT, но у меня была эта проблема с некоторыми документами, сгенерированными с использованием XML / XSLT. Использование   помогло мне решить эту проблему.

1 голос
/ 18 мая 2009

Я протестировал его под Windows XP SP3 x32, используя Qt 4.5.0, и он работал как положено. Не уверен, что это может быть проблема с вашими языковыми настройками Windows или ошибка x64, хотя я сомневаюсь в этом.

1 голос
/ 16 мая 2009

Я протестировал это на Mac, используя Qt 4.5.0. Неразрывная космическая сущность прекрасно работает вместе с другими сущностями. Все, что я сделал, это изменил исходный код в примере проекта MDI, который поставляется с Qt 4.

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.

1 голос
/ 12 мая 2009

На самом деле я ничего не вижу в документах ( здесь ) относительно того, поддерживает ли он даже элементы амперсанда. Возможно, вы захотите проверить некоторые другие, такие как "&" или "<".

В есть упоминание о поддержке тега nobr, поэтому вы можете получить аналогичный эффект с (это пробел между этими тегами):

QTextEdit t;
t.setHtml("<nobr> </nobr>");
1 голос
/ 11 мая 2009

Моим лучшим предположением будет: t.setHtml (" & nbsp; ");

t.setHtml("<html>&nbsp;</html>");
0 голосов
/ 04 декабря 2014

Я бы подумал сделать что-то подобное для создания пробелов, которые работают в QtextEdit (или QTextBrowser):

QString msg = "Some   Text   with  3   Whitespaces";
msg.replace(" ","&nbsp;");

Все пробелы будут заменены HTML-кодом & nbsp; (жестко запрограммированный пробел) Это сработало очень хорошо для меня.

РЕДАКТИРОВАТЬ: Извините, это работает только со следующими:

msg.prepend("<font></font>");

Я не понимаю, почему (тег закрыт, имеет ли это смысл?) Может быть, кто-то хочет это объяснить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...