Дело вот в чем: имеется главное окно, у него есть
QWidget *widget; и QPainter *painter;А также обрабатывается событие (или перегружается, не знаю что там)
void paintEvent(QPaintEvent *event);В конструкторе окна и виджет, и пейнтер создаются, им присваиваются родители и все такое прочее.
TWindow::TWindow()
{
...
field = new QWidget(this);
field->setGeometry(10, 50, 620, 400);
painter = new QPainter();
...
}
Теперь реализация paintEvent:
void TWindow::paintEvent(QPaintEvent *event)
{
painter->begin(field); //если здесь подставить (вместо field) this, то рисует, как и должно быть! То есть в других местах кода ошибки нет
painter->fillRect(0,0, field->width(),field->height(),QBrush(QColor(0,2,127,255)));
painter->end();
}
Если не учитывать комментарий, то выдает следующее в консоль:
QPainter::begin: Paint device returned engine == 0, type: 1
Вследствие чего еще QPainter::end: Painter not active, abortedИ не рисует синее на виджете.
Если поменять field на this, то естественно рисует - синий прямоугольник. Размеры у виджета задал.
Естественно, ошибки повторяются кучу раз, сколько раз окно перерисовывается.
Так вот, суть проблемы:
Как сделать, чтобы при срабатывании события перерисовки у главного окна: на виджете, принадлежащем этому окну, можно было рисовать с помощью QPainter?
Один из путей решения проблемы - сделать наследника от виджета, у которого перегрузить такое событие (то бишь обрабатывать
MyWidget::paintEvent(QPaintEvent *event), то все работает. Но не делать же наследника из-за одной несчастной перегрузки? По идее, если у меня виджет лежит на окне, то на нем должно быть можно рисовать из методов главного окна...
Если вопрос требует телепатов, постараюсь разжевать еще подробнее.