Метод paintEvent для виджетов является обработчиком для события типа "перерисовка виджета". Этот метод вызывается при создании виджета, а также при необходимости его перерисовать, например, в результате изменения размеров виджета.
Это событие можно также создать принудительно, если вызвать для объекта класса метод repaint().
Возможный вид метода paintEvent:
В этом примере рисование производится при помощи объекта QPainter. Этот объект позволяет рисовать графические примитивы - отрезки, окружности и эллипсы, прямоугольники и т.д.
В начале создается объект класса QPainter, привязанный к виджету. Затем используя методы рисования QPainter на этом объекте можно рисовать примитивы. Список возможных методов рисования можно найти в документации на QPainter.
Например:
drawLine - нарисовать линию.
drawEllipse - нарисовать эллипс или окружность.
drawRect - нарисовать прямоугольник.
drawPolygon - нарисовать многоугольник.
Чтобы узнать текущие размеры виджета используются методы width() и height().
При рисовании можно задать параметры пера (Pen) и кисти (Brush). Pen определяет стиль рисуемых линий, окружностей, границ прямоугольника. Brush определяет тип внутренней заливки объектов.
Для установки пера используется метод setPen, которому в качестве параметра необходимо передать объект класса QPen. Примеры использования можно найти в документации.
Для установки кисти используется метод setBrush и параметр класса QBrush.