Куда хитрее надо действовать, если надо сначала отрисовать то, что хочет сам виджет, а поверх — своё.
К примеру, есть у нас QLabel, и мы хотим перечеркнуть текст красным по диагонали. Тогда надо в eventFilter сделать такой финт ушами:
bool MyClass::eventFilter(QObject *obj, QEvent *evt)
{
if (evt->type() == QEvent::Paint)
{
obj->removeEventFilter(this);
QApplication::sendEvent(obj, evt);
obj->installEventFilter(this)
// наша отрисовка поверх уже нарисованного
return true;
}
}
То есть, снимаем фильтр, отрисовываем «родное», включаем фильтр назад, отрисовываем что надо нам.