QWidget::paintEngine 从 QCoreApplication::processEvents 呼叫

QWidget::paintEngine being called from QCoreApplication::processEvents

我正在使用 QOpenGLWidget 将 OSX 应用程序从 Qt 4/Carbon 转换为 Qt5.11。

我已将绘图 "calls" 移至我覆盖的 QOpenGlWidget::paintGL()。

问题是我仍然在控制台上收到这些消息:

QWidget::paintEngine:不应再调用

获取堆栈跟踪,我发现这最终是从 QCoreApplication::processEvents 调用的,我是从我自己的内部事件循环调用的。

这是堆栈跟踪(为便于阅读而编辑)

问题是 ::processEvents 最终会为 QOpenGLWidget 调用 ::paintEngine,在 ::paintGL 之外,但这完全不在我的控制范围内。

FWIW,驱动此事件的事件是 QEvent::UpdateRequest。

我尝试在我的 QOpenGLWidget 中覆盖 ::event - 继承 class 以在收到 QEvent::UpdateRequest 时调用 QOpenGlWidget::update,但这最终导致应用程序无响应。

我应该如何处理尝试绘制 QOpenGlWidgets 的 ::processEvents?

谢谢!

我通过从我们的 QOpenGlWidget 子类中删除这条语句来解决这个问题:

setAttribute(Qt::WA_PaintOnScreen,true);

删除它可以避免 paintEngine 调用(并解决了各种其他问题)。