【问题标题】:QTextEdit changes control charactersQTextEdit 更改控制字符
【发布时间】:2016-10-26 06:30:49
【问题描述】:

我在 Qt 小部件 QTextEdit、QPlainTextEdit 等中遇到了一些我不想遇到的功能。我实际上不知道如何改变这个问题。

我想加密一些文本,用另一个 unicode 字符替换一个 unicode 字符,即使它是控制字符。

所以我以这种方式删除一个简单的字符串: QChar ch = (QChar)0x20; QChar ch2 = (QChar)0xA0; QString str; str.append(ch); str.append(ch2);

这些是通常的空格 (0x20) 和一些不寻常的不间断空格 (0xA0)。在内存中,字符串是绝对完美的。但是,如果我将其设置为带有ui->txt_ciphered->setPlainText(str); 的 QTextEdit 的文本,则此 No-Break Space (0xA0) 将变为通常的空间。我想那是因为它们用于某些类似的目的,但我仍然想在 TextEdit 中获得无间断空格字符,以便我可以像在记事本 ++ 中那样复制它等。

我怎么能改变这个?

【问题讨论】:

  • 如果你想要一个通用的纯文本编辑器,你可能需要使用QScintilla 或类似的东西。 QTextEdit 不是通用纯文本编辑器。按照设计,它是一个富文本编辑器。 Qt 并没有真正带有纯文本编辑器 :(

标签: c++ qt unicode qtwidgets


【解决方案1】:

QTextEdit 不接受不间断空格,为什么?我怎样才能 还在 Qt 编辑控件中使用不间断空格?

问题在于QTextEdit::plainText 属性明确地阻止插入不间断空格并将其转换为仅空格字符。

纯文本:QString

此属性获取文本编辑器的内容并将其设置为纯文本。 删除以前的内容并重置撤消/重做历史 属性已设置。

如果文本编辑有其他内容类型,它不会被替换为 如果您调用 toPlainText(),则为纯文本。唯一的例外是 非中断空间,nbsp;,将被转换为标准 空间。

建议:使用QTextEdit::setText

如果它仍然进行了不需要的转换或没有正确处理该符号,则需要通过将包含   的文本插入 html 标记或 <html>My text</html> 的信封中来为 QTextEdit::setText 选择 HTML 测试形式。

【讨论】:

  • 感谢您的回答。虽然我还是不太清楚。我是否需要将此 0xA0 字符更改为  在 TextEdit 的 html 内容中?每次都会有点尴尬。是否有其他字符被更常见的字符替换?并非所有控制字符都被替换。前 32 个 (0x0 - 0x1F) 显示正确,甚至为空。 QTextEdit::setText 也替换了字符。也许还有另一个 TextEdit 不会改变任何东西?或者 TextEdit 的某些选项会禁止任何更改?
  • @platonshubin Platon Shubin,看,我应该尝试使用自己的代码。我只记得为什么它对你不起作用,正如你所说的那样 - nbsp 转换为空间 - 以及那里有什么样的替代方案。 Попробуйте, с тем же самым текстом, и если не сработает, то с тегом и &nbsp,
  • 好吧,好吧。 Я устанавливал текст и с помощью setText() и с setHtml()。 Строка QString("我的 文本")。 теги он понял и так и так, но пробел всё равно вывел стандартный。 (我的文字)。我可以而且会避免在字典中使用这样的字符,但现在我只是想知道如何像 notepad++ 那样显示这样的符号。
猜你喜欢
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 2022-01-19
  • 2015-02-27
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多