2016-06-23 11 views
0

Я столкнулся с некоторой особенностью в Qt-виджетах QTextEdit, QPlainTextEdit и т. Д., С которыми мне бы не хотелось столкнуться. И я действительно понятия не имею, как изменить эту проблему.QTextEdit изменяет управляющие символы

Я хочу зашифровать некоторый текст, заменив один символ Юникода на другой символ юникода, даже если он управляет одним.

Так что я delcare простой строки так: QChar ch = (QChar)0x20; QChar ch2 = (QChar)0xA0; QString str; str.append(ch); str.append(ch2);

Это обычные пространства (0x20) и некоторые необычные Неразрывный пробел (0xa0). В памяти строка абсолютно идеальна. Но если я установил его как текст QTextEdit с ui->txt_ciphered->setPlainText(str);, это пространство без разрыва (0xA0) станет обычным пространством. Я думаю, это потому, что они предназначены для некоторых аналогичных целей, но я все еще хочу получить символ «Без пробела» в TextEdit, чтобы я мог копировать его и т. Д., Как я могу в Notepad ++ в примере.

Как я могу это изменить?

+0

Если вам нужен редактор обычного текста общего назначения, вам может потребоваться использовать QScintilla или somesuch. 'QTextEdit' - не обычный текстовый редактор общего назначения. Это, по дизайну, богатый текстовый редактор. Qt на самом деле не поставляется с текстовым редактором :( –

ответ

0

QTextEdit не принимает пространство без пробелов, почему? Как я могу использовать без пробелов с элементами управления Qt?

Проблема заключается в том, что свойство QTextEdit::plainText выразительно предотвращает вставку нераспространенного пространства и преобразование его в символ пробела.

PLAINTEXT: QString

Это свойство получает и устанавливает содержание текстового редактора в виде обычного текста. Предыдущее содержимое удаляется, а история отмены/повтора восстанавливается, когда установлено свойство .

Если текст имеет другой тип контента, он не будет заменен обычным текстом , если вы вызываете toPlainText(). Единственным исключением из этого является пространство без разрыва, nbsp ;, которое будет преобразовано в стандартное пространство .

Рекомендация: использовать QTextEdit::setText.

Если он по-прежнему делает нежелательное преобразование или не лечить этот символ правильно, вы должны выбрать HTML форму теста для QTextEdit::setText, вставив текст, содержащий &nbsp; в конверт из HTML-тегов или <html>My&nbsp;text</html>.

+0

Благодарим за ответ. Хотя я все еще не понимаю его. Нужно ли мне менять этот символ 0xA0 на   в html-содержимом TextEdit? всегда кажутся неудобными. Существуют ли другие символы, заменяемые более распространенными? Не все управляющие символы заменены. Первые 32 (0x0 - 0x1F) показаны правильно, даже null. QTextEdit :: setText также заменяет символ. Возможно, есть еще один TextEdit, который ничего не меняет? Или некоторые опции TextEdit, которые запрещали бы любые изменения? – platonshubin

+0

@platonshubin Платон Шубин, смотри, я должен был попробовать с собственным кодом. Я только помню, почему он не работает для вас, как вы заявили в вопросе - nbsp преобразован в космос - и какая альтернатива там.Попробуйте, с тем же самым текстом, и если не сработает, то с тегом и  , – AlexanderVX

+0

Well, okay. Я устанавливал текст и с помощью setText() и с setHtml(). Строка QString(" My   text "). теги он понял и так и так, но пробел всё равно вывел стандартный. (My text). I could and will just avoid using such characters in dictionaries, but for now I am just wondering how to display such symbol like notepad++ does. – platonshubin