Если же для вас дорого перерисовывать сам виджет, поверх которого рисуете, лучше разместить поверх него прозрачный виджет, на котором и рисовать. ИМХО.
Дорого. Поэтому я и поднял тему
В вашем примере ничего нового не нашёл
bool MyLabel::eventFilter(QObject *obj, QEvent *event)
{
if( (event->type() == QEvent::Paint) && (obj == this) ) {
removeEventFilter(this);
QApplication::sendEvent(obj, event);
installEventFilter(this);
QPainter p(qobject_cast<QWidget*>(obj));
p.drawImage(rect().center() - movie->frameRect().bottomRight(), image);
return true;
}
return false;
}
т.е. опять же отрисовка содержимого виджета, а потом отрисовка поверх.
А Ваше предложение трудновыполнимо. У виджета может быть флаг Qt::WA_OpaquePaintEvent. Значит у нашего прозрачного виджета этот флаг не должен быть установлен по определению (т.к. если установлен данный флаг, все виджеты, находящиеся rect'ально под виджетом с этим флагом, не получают paintEvent ). А если мы будем отрисовываться на прозрачный виджет без этого флага, QEvent::Paint будет перенаправляться на низлижащие виджеты (для восстановления прозрачности), что по сути только утяжеляет прорисовку (из Вашего примера мы лишь отлавливаем эвенты.. а так ещё создаётся один лишний виджет).