Select QGraphicsFramework 中的子项及其父项

Select both child item and its parent in QGraphicsFramework

我在我的程序中使用 QGraphicsFramework 实现了一个场景。 所以我有一个形状(父)和它的锚点(子)都是 QGraphicsItem.

Shape::Shape(QGraphicsItem *parent) :
    QGraphicsItem(parent)
{
    setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges);
    anchorPoint = new AnchorPoint(this);
    anchorPoint->setParentItem(this);
    anchorPoint->setVisible(false);
}

锚点项目通常是不可见的。但是当我 select 我的形状时,我必须显示它的锚点,并相应地在形状失去 selection 时隐藏它。 所以我将此操作绑定到 itemChange:

QVariant Shape::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
    switch(change)
    {
        case QGraphicsItem::ItemSelectedChange:
            anchorPoint->setVisible(value.toBool());
        break;
    }
    return QGraphicsItem::itemChange(change, value);
}

但是当我想移动锚点时,问题就出现了。如果我单击它,形状将失去焦点并隐藏其锚点,因此我无法移动它。有没有办法在其父项保持 selected 时 select 子项?

您可以定义自己的isSelected 属性(默认情况下提供的选择,如果需要多个选择)如果选择了另一个 Shape 或单击空场景,则为 false。锚点不是 Shape,不会导致父 Shape 在被选中时被取消选择。

这样您就可以在两种情况下进行选择 - 场景认为已选择的内容,以及您认为已选择的内容。我已经在 QML 中完成了这个并且它非常方便,但是,我将自定义选择称为焦点,使用对象的句柄改变选择而不是焦点,这对于具有额外调度程序的键盘事件也很有用,因为我假设您还希望 Shape 在选择锚点时接收键盘事件,而不是被锚点接收。