我GraphicsItem
在一个新类中创建了一个并将其发送到GraphicsView
另一个文件中。我已将标志设置ItemIsMovable
为 true,并且可以移动该项目。
我怎么知道用户把它移到了哪里?而且,我怎样才能手动设置位置?
[基本上我有一个项目,如果用户将它移动到足够靠近正确的位置我想自动将它移动到正确的位置]
为了获取鼠标事件,我使用了这些函数:
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);
}
我目前的想法是也使用绘制算法,并为 Pressed 创建一个类似于下面显示的 if 语句(它会在按下时更改项目的颜色)。
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);
}
本质上:您如何获得 a 的坐标QGraphicsItem
以及如何更改它们?