Other things can cause the widget to be dirty:
* VC enable / disable
* slip enabled and slip position (the rate could be zero with slip still moving forward)
* playposition 

So instead, just record the old playposition, the old slip position, the old slip enable in paintEvent and if they have changed in this method, set the widget dirty.

Also, in the slots for VC enabled, signal enabled, and signal updates you'll want to flag it dirty too.