【发布时间】:2020-06-17 09:22:49
【问题描述】:
使用 myQTextEdit.append() 时插入文本的样式如下(Qt 5.14 文档):
"附加的新段落将具有与当前段落相同的字符格式和块格式,由光标的位置决定。"
不过,我会发现能够以 neutral 样式附加文本很方便。
导致我的问题的原因是: 我有一个 QTextEdit 形式的日志窗口,我在其中附加文本(大部分是中性的,但某些元素可能是彩色的,等等)。由于它是用于日志目的,QTextEdit 是只读的,并且文本元素总是添加到最后(append())。只要用户从不点击文本就可以了。当点击 QTextEdit 的一部分时,光标位置会改变。这不是该位置的问题,因为我使用了在末尾插入文本的 append(),即使光标在其他地方也是如此。但是,如果用户点击了非中性样式的内容,那么随后附加的文本也将具有这种样式,这是不可取的。
对我来说有趣的是要么阻止光标,以便用户不能篡改样式,要么在不基于当前段落的样式的情况下追加。
除了继承 QTextEdit 之外,有没有办法改变这种行为?
如前所述,我可以在执行任何 append() 之前检查光标位置(如果光标已移动,则将光标设置在文档的末尾),但如果存在,我更喜欢更“全局”的解决方案。
【问题讨论】:
-
也许,可能需要更多的努力:QTextCursor::insertHtml() 其中
QTextCursor之前设置为文档结尾。 (我相信这可能是QTextEdit::textCursor() 的副本,以将视觉光标保持在其原始位置。) -
是的,我可以在每次插入文本之前将光标设置到文档末尾以避免不必要的样式效果。令我惊讶的是,没有办法“阻止”用户/单击光标修改(即使在只读 QTextEdit 上)。
-
你能提供一个minimal reproducible example吗?我不确定我是否完全理解你的意图。
-
我用更多细节编辑了文本,我认为这使意图更清晰。如果没有,我将尝试提供一个最小的可重现示例(但问题主要是由用户/人与图形元素的交互引起的,这在代码示例中很难说明)。
-
在创建一个非常清晰的 MCVE 方面做得很好,事实证明它更清楚地反映了我认为可能的问题。我这边要记住的事情!