17

我有一个 QScrollArea 父亲我很棒的滚动小部件。我喜欢在各种场合更新内容。

为此,我重写了paintEvent(QPaintEvent *). 然后每次我想要它完成时,我都会调用update()小部件。

问题: paintEvent()永远不会被这个调用!

到目前为止我在故障排除方面的尝试:

  • 使用repaint()而不是update(). 应该立即调用它。不幸的是没有。
  • 测试isVisible()updatesEnabled
  • 测试我的覆盖是否正确。调整窗口大小调用我的函数。只有我的手动 update()、repaint() 调用失败。
  • 实现一个 QTimer 以每 500 毫秒触发一次 update() 或 repaint()。触发器给出文本输出,函数不被调用。

有人知道接下来要检查什么吗?什么可以让 repaint()调用paintEvent()?

4

1 回答 1

28

解决方案是从您的派生类调用this->viewport()->repaint()or ,而不仅仅是or 。this->viewport()->update()QAbstractScrollArearepaint()update()

Qt 文档中提供了更多信息:

QWidget * QAbstractScrollArea::viewport () const

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

由于我们在QAbstractScrollArea派生类中的内容将显示在视口小部件中,因此调用视口小部件的更新或重绘以再次绘制我们的数据(调用我们的)是有意义的paintEvent

于 2010-07-23T12:41:21.723 回答