Russian Qt Forum
Ноябрь 23, 2024, 19:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка событий в QGraphicsItem  (Прочитано 4424 раз)
FreeSlave
Гость
« : Июль 26, 2011, 20:12 »

Наследовал QGraphicsItem, переопределил функции paint и boundingRect. Вопрос: как осуществлять перерисовку объекта при определенном событии? Например, нажатие мыши. Ясно, что через mousePressEvent, но как именно?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Июль 26, 2011, 20:40 »

update() не устроит?
Записан
FreeSlave
Гость
« Ответ #2 : Июль 26, 2011, 22:26 »

Можно поконкретней? Под перерисовкой я имею в виду изменение внешнего вида элемента, а не перерисовку того же самого.
Записан
vintik
Гость
« Ответ #3 : Июль 27, 2011, 00:29 »

завести флаг, по событию флаг менять и вызывать update().
в paint засунуть, скажем, switch и отрисовку делать в зависимости от значения флага.
Записан
FreeSlave
Гость
« Ответ #4 : Июль 27, 2011, 18:51 »

А откуда вообще вызывается метод paint? Раз уж в него передается painter, может, передавать уже готовый QPainter, а потом просто им отрисовывать нужную фигуру? Со свитчем как-то некрасиво по-моему.
Записан
FreeSlave
Гость
« Ответ #5 : Июль 28, 2011, 20:12 »

И что вы имейте в виду под флагом? Новый атрибут в самом классе?
Записан
vintik
Гость
« Ответ #6 : Июль 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();   // восстанавливаем настройки пэинтера, если дальше хотим рисовать что-то пэинтером из входного параметра

  // рисуем что-то пэинтером из входного параметра
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.