Название: Как рисовать на виджете при срабатывании события перерисовки у окна? Отправлено: Кусай от Январь 20, 2011, 15:16 Дело вот в чем: имеется главное окно, у него есть QWidget *widget; и QPainter *painter;
А также обрабатывается событие (или перегружается, не знаю что там) void paintEvent(QPaintEvent *event); В конструкторе окна и виджет, и пейнтер создаются, им присваиваются родители и все такое прочее. Код: TWindow::TWindow() Теперь реализация paintEvent: Код: void TWindow::paintEvent(QPaintEvent *event) Если не учитывать комментарий, то выдает следующее в консоль: QPainter::begin: Paint device returned engine == 0, type: 1 Вследствие чего еще QPainter::end: Painter not active, aborted И не рисует синее на виджете. Если поменять field на this, то естественно рисует - синий прямоугольник. Размеры у виджета задал. Естественно, ошибки повторяются кучу раз, сколько раз окно перерисовывается. Так вот, суть проблемы: Как сделать, чтобы при срабатывании события перерисовки у главного окна: на виджете, принадлежащем этому окну, можно было рисовать с помощью QPainter? Один из путей решения проблемы - сделать наследника от виджета, у которого перегрузить такое событие (то бишь обрабатывать MyWidget::paintEvent(QPaintEvent *event), то все работает. Но не делать же наследника из-за одной несчастной перегрузки? По идее, если у меня виджет лежит на окне, то на нем должно быть можно рисовать из методов главного окна... Если вопрос требует телепатов, постараюсь разжевать еще подробнее. Название: Re: Как рисовать на виджете при срабатывании события перерисовки у окна? Отправлено: igor_bogomolov от Январь 20, 2011, 15:34 Нужно в TWindow установить фильтр событий для field, ловить QEvent::Paint и отрисовывать то что нужно
См. bool QObject::eventFilter ( QObject * watched, QEvent * event ) [virtual] Название: Re: Как рисовать на виджете при срабатывании события перерисовки у окна? Отправлено: Fat-Zer от Январь 20, 2011, 15:58 ИМХО проще и правильнее унаследовать...
|