QPlainTextEdit 强制重绘

Posted

技术标签:

【中文标题】QPlainTextEdit 强制重绘【英文标题】:QPlainTextEdit force redraw 【发布时间】:2013-06-10 10:21:11 【问题描述】:

我想强制重绘 QPlainTextEdit 小部件,因为我的突出显示规则发生了变化。但是,根据新规则,不会重绘所有线条和块。

这是真的,因为如果我修改一行,就会应用正确的突出显示,我很高兴。但是我不能强制修改每个块来查看任何变化!

有没有办法强制重绘?我尝试了 update() 和类似方法,但似乎没有任何效果。

谢谢!

【问题讨论】:

【参考方案1】:

QPlainTextEdit 继承了 QAbstractScrollArea,因此它的内容位于视口窗口小部件中。试试这个:

text_edit->viewport()->update();

【讨论】:

【参考方案2】:

您必须致电QSyntaxHighlighter::rehighlight() 将新的突出显示规则应用于整个文档。

【讨论】:

是的!这似乎是最干净的解决方案。【参考方案3】:

你可以试试:

text_edit->repaint();

【讨论】:

【参考方案4】:

在我的情况下,只需调用 rehighlight 就不会更新视图。在我的情况下,我想在光标移动时更新高亮:

void MyHighlighter::onSelectionChanged(int start, int end)

    _visibleCursor.setPosition(end);
    document()->documentLayout()->updateBlock(_visibleCursor.block());
    rehighlightBlock(_visibleCursor.block());

【讨论】:

以上是关于QPlainTextEdit 强制重绘的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QPlainTextEdit 设置文本?

从 PaintCode 强制自定义 NSView 重绘

强制 QItemDelegate 重绘

如何强制刷新/重绘 JScrollPane?

Delphi VCL 强制菜单重绘

如何在 NSScrollView 中强制重绘内容