3

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

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

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

谢谢!

4

4 回答 4

7

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

text_edit->viewport()->update();
于 2013-06-10T10:24:25.547 回答
1

你可以试试:

text_edit->repaint();
于 2013-06-10T12:49:00.963 回答
1

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

于 2013-06-10T12:25:06.953 回答
0

在我的情况下,只需调用 rehighlight 就不会更新视图。就我而言,我想在光标移动时更新突出显示:

void MyHighlighter::onSelectionChanged(int start, int end)
{
    _visibleCursor.setPosition(end);
    document()->documentLayout()->updateBlock(_visibleCursor.block());
    rehighlightBlock(_visibleCursor.block());
}
于 2017-03-01T21:44:30.517 回答