我想强制重绘一个QPlainTextEdit小部件,因为我的突出显示规则发生了变化。但是,所有行和块都不会重新绘制,符合新规则。
这是真的,因为如果我修改一条线,就会应用正确的高亮显示,我很高兴。但我无法强制修改每个块以查看任何更改!
有没有办法强制重绘?我尝试过update()和similars,但似乎没什么用。
谢谢!
答案 0 :(得分:3)
QPlainTextEdit继承QAbstractScrollArea,因此其内容位于viewport小部件中。试试这个:
text_edit->viewport()->update();
答案 1 :(得分:1)
您必须致电QSyntaxHighlighter::rehighlight()
将新的突出显示规则应用于整个文档。
答案 2 :(得分:1)
您可以尝试:
text_edit->repaint();
答案 3 :(得分:0)
在我的情况下,简单地调用rehighlight不会更新视图。在我的情况下,我想要光标移动时更新突出显示:
void MyHighlighter::onSelectionChanged(int start, int end)
{
_visibleCursor.setPosition(end);
document()->documentLayout()->updateBlock(_visibleCursor.block());
rehighlightBlock(_visibleCursor.block());
}