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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: странное эффект от флага ItemIsMovable  (Прочитано 4581 раз)
lighting
Гость
« : Июль 27, 2009, 17:09 »

Пытаюсь нарисовать кнопку как QGraphicsItem
Код
C++ (Qt)
void Butt::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
{
 
   painter->setPen(Qt::NoPen);
   painter->setBrush(Qt::darkGray);
   painter->drawRoundRect(10, 10, 120, 40, 5);
 
   QLinearGradient gradient(20, 10, 20, 40);
   if (option->state & QStyle::State_Sunken) {
       gradient.setColorAt(1, QColor(Qt::yellow).light(120));
       gradient.setColorAt(0, QColor(Qt::darkYellow).light(120));
   } else {
       gradient.setColorAt(0, QColor(Qt::yellow).light(120));
       gradient.setColorAt(1, QColor(Qt::darkYellow).light(120));
   }
   painter->setBrush(gradient);
   painter->drawRoundRect(12, 12, 116, 36, 5);
}
 
void Butt::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
   update();
   QGraphicsItem::mousePressEvent(event);
}
void Butt::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
   update();
   QGraphicsItem::mouseReleaseEvent(event);
}
Когда создаю ее с флагом ItemIsMovable все работает нормально, но кнопка свободно таскается мышкой по всему окну. Если-же я убираю этот флаг, то события кнопкой отлавливаются, но правильной отрисовки состояния кнопки не происходит. В Assistant'е я связи между этими двумя флагами не нашел, но она похоже есть. Как-же правильно отрисовывать нажатие кнопки, чтобы она при этом не таскалась по всему экрану?
Записан
f-r-o-s-t
Гость
« Ответ #1 : Июль 27, 2009, 17:52 »

Первое что пришло в голову включи ItemIsMovable , а событие предку не отдавай.

В Assistant'е я связи между этими двумя флагами не нашел, но она похоже есть.

Какими двумя флагами ?
Записан
lighting
Гость
« Ответ #2 : Июль 27, 2009, 22:07 »

f-r-o-s-t ItemIsMovable и  State_Sunken. При выключении первого почему-то выключается и второй.
Записан
f-r-o-s-t
Гость
« Ответ #3 : Июль 27, 2009, 22:45 »

Ну а что если включить ItemIsMovable , а событие предку не отдавать ?
Записан
lighting
Гость
« Ответ #4 : Июль 28, 2009, 08:58 »

кнопка по прежнему и нажимается и перетаскивается, только при перетаскивании теперь еще смещение указателя мышки происходит.
PS: Совсем забыл, Qt 4.5
Записан
f-r-o-s-t
Гость
« Ответ #5 : Июль 28, 2009, 09:08 »

Все понял. Я перепутал, это надо у сцены событие перемещения мыши не отдавать предку.
У тебя кроме твоих кнопок есть еще что нибудь на сцене ?
Записан
lighting
Гость
« Ответ #6 : Июль 28, 2009, 12:57 »

да пока-что на сцене у меня одна только кнопка Улыбающийся
У меня для сцены события мыши вообще не определены. Нужно объявить mousePressEvent и mouseReleaseEvent с пустым телом?
« Последнее редактирование: Июль 28, 2009, 13:08 от lighting » Записан
f-r-o-s-t
Гость
« Ответ #7 : Июль 28, 2009, 21:22 »

Достаточно только нажатие, НО не зная чего ты хочешь получить в итоге, не могу тебе сказать что это хороший вариант.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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