我有一个根小部件,其中包含所有不同的小部件作为子级。有些是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