[英]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.