代码之家  ›  专栏  ›  技术社区  ›  ypnos

update()或repaint()无法触发paintevent()。

  •  15
  • ypnos  · 技术社区  · 14 年前

    我有一个qscrollarea管理我的可怕的滚动小部件。我喜欢在各种场合更新内容。

    为此我做了一个覆盖 paintEvent(QPaintEvent *) . 每次我想做的时候我都会打电话 update() 在小部件上。

    问题: paintEvent() 从来没有这样叫过!

    到目前为止,我在故障排除中所做的尝试:

    • 使用 repaint() 而不是 UpDead() . 应该立即调用它。不幸的是,没有。
    • 测试 isVisible() updatesEnabled
    • 测试我的超控是否正确。 调整窗口大小会调用我的函数。 只有我的手动更新(),重新绘制()调用失败。
    • 每隔500毫秒实现一个qtimer来触发update()或repaint()。触发器提供文本输出,不调用函数。

    有人知道下一步要检查什么吗?什么可以使重涂 调用paintEvent()?

    1 回复  |  直到 9 年前
        1
  •  25
  •   BartoszKP    9 年前

    解决办法是打电话 this->viewport()->repaint() this->viewport()->update() 从你 QAbstractScrollArea 派生类而不是 repaint() update() .

    更多信息见 Qt documentation :

    QWidget * QAbstractScrollArea::viewport () const

    返回视区小部件。 使用 QScrollArea::widget() 函数来检索视区小部件的内容。

    因为我们的 Qabstract滚动区 派生类将显示在viewport小部件中,调用viewport小部件的更新或重新绘制以再次绘制数据是有意义的(使用 paintEvent 叫)