Название: Обработка событий в QGraphicsItem Отправлено: FreeSlave от Июль 26, 2011, 20:12 Наследовал QGraphicsItem, переопределил функции paint и boundingRect. Вопрос: как осуществлять перерисовку объекта при определенном событии? Например, нажатие мыши. Ясно, что через mousePressEvent, но как именно?
Название: Re: Обработка событий в QGraphicsItem Отправлено: Mikhail от Июль 26, 2011, 20:40 update() не устроит?
Название: Re: Обработка событий в QGraphicsItem Отправлено: FreeSlave от Июль 26, 2011, 22:26 Можно поконкретней? Под перерисовкой я имею в виду изменение внешнего вида элемента, а не перерисовку того же самого.
Название: Re: Обработка событий в QGraphicsItem Отправлено: vintik от Июль 27, 2011, 00:29 завести флаг, по событию флаг менять и вызывать update().
в paint засунуть, скажем, switch и отрисовку делать в зависимости от значения флага. Название: Re: Обработка событий в QGraphicsItem Отправлено: FreeSlave от Июль 27, 2011, 18:51 А откуда вообще вызывается метод paint? Раз уж в него передается painter, может, передавать уже готовый QPainter, а потом просто им отрисовывать нужную фигуру? Со свитчем как-то некрасиво по-моему.
Название: Re: Обработка событий в QGraphicsItem Отправлено: FreeSlave от Июль 28, 2011, 20:12 И что вы имейте в виду под флагом? Новый атрибут в самом классе?
Название: Re: Обработка событий в QGraphicsItem Отправлено: vintik от Июль 28, 2011, 22:38 по поводу метода paint - http://doc.crossplatform.ru/qt/4.7.x/qgraphicsitem.html#paint
так же paint отрабатывает после вызова update(). Под флагом, да, я имею ввиду атрибут класса. На мой взгляд, вполне покатит) А QPainter нада настраивать непосредственно в методе paint Примерно так: void YourItem::paint(QPainter *_painter, const QStyleOptionGraphicsItem* _style, QWidget* _widget) { _painter->save(); // сохраняем настройки пэинтера _painter->setPen(Qt::green); // делаем новые настройки пэинтера и рисуем чё-то своё QRectF rectangle(10.0, 20.0, 80.0, 60.0); _painter->drawRect(rectangle); _painter->restore(); // восстанавливаем настройки пэинтера, если дальше хотим рисовать что-то пэинтером из входного параметра // рисуем что-то пэинтером из входного параметра } |