繁体   English   中英

如何知道 QGraphicsItem 正在移动

[英]How to know a QGraphicsItem is moving

我有一个 QGraphicsItem 的子 class 带有 Selectable、Movable 和 SendsScenePositionChanges 标志。 当我 select 许多项目并移动它们时,所有项目都会收到 itemChange 事件。 如果项目正在移动,有什么方法可以在itemChanged中检测到? (或其他方式,但在项目级别而不是场景级别)

我试图检查左键是否被按住,但这种方式似乎不起作用。

QVariant BaseItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
    if (change == ItemScenePositionHasChanged)
    {
        Qt::MouseButtons btns = QApplication::mouseButtons();
        if (btns & Qt::LeftButton) {
            // The left button is pressed.
            mIsMoving = true;
        }
        else
        {
            mIsMoving = false; // this line is never triggered
        }
    }

    return QGraphicsItem::itemChange(change, value);
}

似乎您必须启用ItemSendsGeometryChanges标志才能接收此事件。 此外,还有两个相似但不同的事件: QGraphicsItem::ItemPositionChangeQGraphicsItem::ItemPositionHasChanged 第一个在项目移动时触发,第二个在它完成移动后触发。 不同之处在于.pos()如果在事件回调中调用,则返回不同的值。 对于第一个事件,它返回原始项目 position,对于第二个事件,它返回一个新的 position。 这两个事件在他们的论点中都有新的立场。

有关这些事件的更多信息: https://doc.qt.io/qt-6/qgraphicsitem.html#GraphicsItemChange-enum

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM