QTextEdit наследуется таким образом:
QObject->QWidget->QFrame->QAbstractScrollArea->QTextEdit
В QAbsctractScrollArea все эвенты QWidgeta переопределяются, и эти методы становятся виртуальными, причем они должны использовать viewport. Значит унаследовав QTextEdit и объявив в своем классе эти эвенты ты автоматически уже используешь viewport. Но есть еще метод viewportEvent, в принципе он не должен использоваться, т.к. должно и так все работать, но мало ли:
bool QAbstractScrollArea::viewportEvent ( QEvent * event ) [virtual protected]
The main event handler for the scrolling area (the viewport() widget). It handles the event specified, and can be called by subclasses to provide reasonable default behavior.
Returns true to indicate to the event system that the event has been handled, and needs no further processing; otherwise returns false to indicate that the event should be propagated further.
You can reimplement this function in a subclass, but we recommend using one of the specialized event handlers instead.
Specialised handlers for viewport events are: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent(), and resizeEvent().