Как я могу узнать, переместился ли QGraphicsItem, созданный в отдельном классе, на сцену (изменил свою позицию)?

Я создал GraphicsItem в новом классе и отправили его GraphicsView в другом файле. Я установил флаг ItemIsMovable как истина, и я могу переместить элемент.

Как я могу узнать, куда пользователь переместил его? И как я могу установить положение вручную?

[По сути, у меня есть предмет, если пользователь перемещает его достаточно близко к нужному месту, я хочу автоматически переместить его в нужное место]

Чтобы получить события мыши, я использовал эти функции:

  void Detector::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Pressed = true;
update();
QGraphicsItem::mousePressEvent(event);
}

void Detector::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Pressed = false;
Moving = false;
update();
QGraphicsItem::mouseReleaseEvent(event);
}

void Detector::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
Moving = true;
update();
QGraphicsItem::mouseMoveEvent(event);
}

В настоящее время я думаю использовать алгоритм рисования и создать оператор if, аналогичный приведенному ниже для Pressed (который изменяет цвет элемента при нажатии).

 void Detector::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QBrush darkBrown(QColor(83,71,65));
QBrush clickedBrown(QColor(122,83,66));
//fillBrush.setColor(darkBrown);

QPolygon DetectorPolygon;
DetectorPolygon << QPoint(0,0);
DetectorPolygon << QPoint(15,10);
DetectorPolygon << QPoint(50,10);
DetectorPolygon << QPoint(50,20);
DetectorPolygon << QPoint(15,20);
DetectorPolygon << QPoint(0,30);

QPen borderPen;
borderPen.setWidth(2);
borderPen.setColor(QColor(152,133,117));

painter->translate(780,425);

if (Pressed==true)
{
painter->setBrush(clickedBrown);

}
else
{
painter->setBrush(darkBrown);
}

if (Moving==true)
{

}
else
{

}

painter->setPen(borderPen);
painter->drawPolygon(DetectorPolygon);

}

По сути: как вы получаете координаты QGraphicsItem и как ты их меняешь?

0

Решение

Вы всегда можете позвонить QPointF pos() const; получить координаты элемента и void setPos(const QPointF &pos); чтобы изменить их. Но должно быть понятно, если вы просто проверите документацию.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]