As Wysota said, when the data that is driving whatever you display in the widget changes, call update() and make sure you program does not block the Qt event loop. It really is that simple and it's not a "workaround". If the data changes every millisecond then you might need to be a bit smarter about how often you update() the widget.

You have not shown us anything that might drive the widget content so I don't see how we can be specific.


BTW: I just built your code with Qt 5.0.1 on Windows 7 32-bit. No hanging, lockups etc. It does sit, as expected, on near 100% CPU.