QMetaObject::invokeMethod( theme, [this, theme]() { pendingChildUpdate = false; theme->updateChildren(theme->parent()); }, Qt::QueuedConnection); This means that you can change the palette and potentially render a frame with half the palette out of sync. "Event compression" is just a thing that causes difficult bugs and wastes lots of time. If we're worried about the cost of calling setXyzColor a tonne of times indepdendently we should make the colours a separate object that can be set atomically.