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 强制重绘的主要内容,如果未能解决你的问题,请参考以下文章