@BigBen
Yes, you always need to write a new class which derives from the base class if you need to override a virtual method, as QWidget::paintEvent().
The Analog Clock Example illustrates overriding paintEvent(). There will be hundreds of other examples online.