簡體   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