【问题标题】:QPlainTextEdit force redrawQPlainTextEdit 强制重绘
【发布时间】:2013-06-10 10:21:11
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: qt widget syntax-highlighting qwidget qtextedit


    【解决方案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());
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 2013-01-08
          • 2015-12-27
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          相关资源
          最近更新 更多