[英]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::ItemPositionChange
和QGraphicsItem::ItemPositionHasChanged
。 第一个在项目移动时触发,第二个在它完成移动后触发。 不同之处在于.pos()
如果在事件回调中调用,则返回不同的值。 对于第一个事件,它返回原始项目 position,对于第二个事件,它返回一个新的 position。 这两个事件在他们的论点中都有新的立场。
有关这些事件的更多信息: https://doc.qt.io/qt-6/qgraphicsitem.html#GraphicsItemChange-enum
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.