LINUX.ORG.RU

Компилируется, но не работает пример из документации по QPainter

 ,


0

1

В документации на QPainter Qt 5.4.2 написан следующий пример:

void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(Qt::blue);
    painter.setFont(QFont("Arial", 30));
    painter.drawText(rect(), Qt::AlignCenter, "Qt");
}

Такое переопределение метода paintEvent() должно нарисовать строку «Qt» в центре виджета.
Вместо этого в логе пишется:
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::setFont: Painter not active

Как побороть?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Попробуйте добавить вызов paintEvent базового класса с этим же событием в начало метода, должно помочь.

anonymous
()
Ответ на: комментарий от RazrFalcon

Раскрою немного вашу мысль: все, что наследуется от QAbstractScrollArea, требует вызова painter-а на viewport(), а не на this, потому что отрисовка на самом деле выполняется на viewport-е. QAbstractScrollArea заворачивает paintEvent и целый список других событий от viewport-а в сам виджет:

For convenience, QAbstractScrollArea makes all viewport events available in the virtual viewportEvent() handler. QWidget's specialized handlers are remapped to viewport events in the cases where this makes sense. The remapped specialized handlers are: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent(), and resizeEvent().

anonymous
()
Ответ на: комментарий от RazrFalcon

Всем спасибо, отмечаю тему как решенную.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.