A common way to work around this problem for any type of widget is to derive from the widget class and override the resizeEvent() method. In the new method, you start a timer with a short timeout (250 ms or so), and then exit without calling the base class resizeEvent. In the timer's timeout() slot, you set the new widget size. The logic is that as long as the user is resizing the widget, the timer will keep being restarted and no drawing will take place. As soon as the user stops (or pauses for longer than the timer period) the widget will redraw.

This will also work if the resize event gets called from something other than user interaction (for example, when the layout is setting sizes for its contents), but there will be a slight delay before the content gets painted. You can prevent this if you check to see if the widget is visible before starting the timer - the widget is not yet visible when the layout is doing its initial calculations before showing the widget.