Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: lighting от Июль 27, 2009, 17:09



Название: странное эффект от флага ItemIsMovable
Отправлено: 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'е я связи между этими двумя флагами не нашел, но она похоже есть. Как-же правильно отрисовывать нажатие кнопки, чтобы она при этом не таскалась по всему экрану?


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: f-r-o-s-t от Июль 27, 2009, 17:52
Первое что пришло в голову включи ItemIsMovable , а событие предку не отдавай.

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

Какими двумя флагами ?


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: lighting от Июль 27, 2009, 22:07
f-r-o-s-t ItemIsMovable и  State_Sunken. При выключении первого почему-то выключается и второй.


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: f-r-o-s-t от Июль 27, 2009, 22:45
Ну а что если включить ItemIsMovable , а событие предку не отдавать ?


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: lighting от Июль 28, 2009, 08:58
кнопка по прежнему и нажимается и перетаскивается, только при перетаскивании теперь еще смещение указателя мышки происходит.
PS: Совсем забыл, Qt 4.5


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: f-r-o-s-t от Июль 28, 2009, 09:08
Все понял. Я перепутал, это надо у сцены событие перемещения мыши не отдавать предку.
У тебя кроме твоих кнопок есть еще что нибудь на сцене ?


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: lighting от Июль 28, 2009, 12:57
да пока-что на сцене у меня одна только кнопка :)
У меня для сцены события мыши вообще не определены. Нужно объявить mousePressEvent и mouseReleaseEvent с пустым телом?


Название: Re: странное эффект от флага ItemIsMovable
Отправлено: f-r-o-s-t от Июль 28, 2009, 21:22
Достаточно только нажатие, НО не зная чего ты хочешь получить в итоге, не могу тебе сказать что это хороший вариант.