QPlainTextEdit强制重绘

时间:2013-06-10 10:21:11

标签: qt widget syntax-highlighting qwidget qtextedit

我想强制重绘一个QPlainTextEdit小部件,因为我的突出显示规则发生了变化。但是,所有行和块都不会重新绘制,符合新规则。

这是真的,因为如果我修改一条线,就会应用正确的高亮显示,我很高兴。但我无法强制修改每个块以查看任何更改!

有没有办法强制重绘?我尝试过update()和similars,但似乎没什么用。

谢谢!

4 个答案:

答案 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());
}