【问题标题】:What method is called when a QGraphicsItem get selected选择 QGraphicsItem 时调用什么方法
【发布时间】:2012-05-04 10:55:14
【问题描述】:

可能是一个棘手的问题,但我找不到答案。

我需要知道 QGraphicsItem 何时被选中。必须有一个被调用的方法。

我知道QGraphicsItem::itemChange(),但它被频繁调用。

有没有更好的方法?

谢谢

编辑:有了这个

if(change == ItemSelectedChange && scene()){
    cout << "haha " << i++ << endl;
}

每次选择更改我都会接到两个电话。

【问题讨论】:

    标签: qt qgraphicsitem


    【解决方案1】:

    您应该在 QGraphicsItem::itemChange 方法中考虑value。你想要的大概是这样的:

    QVariant YourItem::itemChange(GraphicsItemChange change, const QVariant &value)
    {
        if (change == QGraphicsItem::ItemSelectedChange)
        {
            if (value == true)
            {
                // do stuff if selected
            }
            else
            {
                // do stuff if not selected
            }
        }
    
        return QGraphicsItem::itemChange(change, value);
    }
    

    【讨论】:

    • Thx 比我发现的效果更好:在 if 中添加 && this.isSelected()。
    • @Anthony,我有一个关于 else 的问题。当我选择另一个图形项目时,else 部分被触发。我明白那个。我面临一个问题,我需要在鼠标按下另一个图形项时触发 else 部分。现在它仅在我按下并释放另一个图形项上的鼠标按钮时触发。有什么解决办法吗?
    • @GUI-Novice 我会尝试在其他项目的 mousePressEvent 中调用 scene()->clearSelection() 以确保在鼠标按下时取消选择该项目。
    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多