我想强制重新绘制qplaintexttedit小部件,因为我的高亮显示规则发生了变化。然而,所有的线和块都不会重新绘制,以尊重新规则。
这是真的,因为如果我修改一行,就会应用正确的高亮显示,我很高兴。但是我不能强制修改每个块来查看任何更改!
有办法强制重画吗?我尝试了update()和类似的方法,但似乎没有任何工作。
谢谢!
qplaintexttedit继承了QAbstractScrollArea,所以它的内容位于视窗小部件中。试试这个:
text_edit->viewport()->update();
您必须调用QSyntaxHighlighter::rehighlight()
才能将新的突出显示规则应用于整个文档。
您可以尝试:
text_edit->repaint();
在我的例子中,简单地调用rehighlight不更新视图。在我的情况下,我想更新高亮时,光标移动,所以:
void MyHighlighter::onSelectionChanged(int start, int end)
{
_visibleCursor.setPosition(end);
document()->documentLayout()->updateBlock(_visibleCursor.block());
rehighlightBlock(_visibleCursor.block());
}