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