Можно ли в Qt переопределить paintEvent без создания потомка?
Можно: doc.qt.digia.com/4.7-snapshot/eventsandfilters.html#event-filters, если вернуть true из eventFilter то paintEvent виджета вызван не будет.
Собственно, фильтр можно задать для уже имеющегося виджета, тогда не придется создавать отдельный класс фильтра:
...
  this->paint_area->installEventFilter(this);
...
bool MainWindow::eventFilter(QObject *target, QEvent *event) {
    if (target == this->paint_area) {
        if (event->type() == QEvent::Paint) {
            this->paintSmth((QPaintEvent*)event);
            return true;
        }
    }

    return false;
}
