如何知道当前正在移动哪个 QGraphicsItem?

How to know which of the QGraphicsItems is being moved at the moment?

我有 QGraphicsScene,其中显示了一些自定义 QGraphicsItems。这些项目在继承自 QGraphicsItem 的 class MeasurePoint 中进行了描述。它们也存储在 QList 中,因此每个项目都有它的索引。它们像这样添加到场景中:

void MeasureSpline::addNode(qreal xPos, qreal yPos, QGraphicsScene *scene)
{
    MeasurePoint *point = new MeasurePoint(xPos, yPos, points.size());
    points.append(point);
    point->setPoint(scene);
}

其中 points 是:

QList<MeasurePoint*> points;

并且每个 MeasurePoint 的构造如下:

MeasurePoint::MeasurePoint(qreal a, qreal b, int c)
{
    xPos = a;
    yPos = b;
    index = c;
    movable = false;
    selected = false;
}

setPoint()是:

void MeasurePoint::setPoint(QGraphicsScene *scene)
{
    scene->addItem(this);
}

我有一个设置项目可移动的方法。如果我使用这种方法,项目就会变得可移动,我对结果很满意。但我目前的目标是知道目前正在移动哪些项目。可以吗?如何?感谢您的帮助。

您可以捕获(鼠标按下和移动)事件 sent to QGraphicsItem from QGraphicsScene 然后 - 例如 - 发出一个您可以连接的信号。

首先,让 QGraphicsItem 像这样对位置变化做出反应:

item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | 
QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemSendsScenePositionChanges);

然后您可以重新实现 Change-Event 并从那里发出信号:

QVariant Item::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemPositionChange  && scene() || change == ItemScenePositionHasChanged)  // either during mouseMoveEvent or when Dropped again
{
    emit itemMoved();  // connect to other SLOT and cast QObject::sender() or something here....
}
    return QGraphicsItem::itemChange(change, value);
}

编辑:

接收方法未测试代码:

void MyClass::onItemMoved()
{

MesurePoint* item = dynamic_cast<MesurePoint*>(QObject::sender());

if (item != NULL)
 {
   int index = points.IndexOf(item);
 }
}