Qt5-从子级阻止QWidget update()函数调用

时间:2019-01-10 23:38:05

标签: c++ qt opengl

我有一个根小部件,其中包含所有不同的小部件作为子级。有些是QOpenGLWidgets,有些是常规的QWidget

每次我想更新一个小部件时,我都会在孩子的小部件中调用update()。但是我发现,如果调用了孩子的update(),Qt实际上会激发孩子的父update()函数。这使我的QOpenGLWidget的更新次数比我需要的更新次数多(当一个QWidget的孩子update()会触发父母的update(),而父母的update()可能会触发其儿童update())。这有点烦人,因为它会降低gl渲染的速度。有时,如果更新过于频繁,我的QOpenGLWidget可能会闪烁,因为我还没有完成更新frameBuffer并将其交换到屏幕上。

我知道,如果预定的update()有很多,Qt可能会优化一些update()的电话。但这并没有解决我的问题。我已经尝试对根窗口小部件进行QWidget::setUpdatesEnabled()了,但实际上它阻止了除子元素之外的所有update()子元素(尽管我setUpdatesEnabled(true)对其子元素)。

最好让QOpenGLWidget自己安排update()而不是它的父级为update()开火。所以我的问题是,有什么办法可以阻止update()致电给特定的父母/孩子?

平台:Qt5.6.2,Ubuntu 16.04,OpenGL3.3

0 个答案:

没有答案