首页 文章

如何在重新生成QML对象时避免锚定错误

提问于
浏览
0

在QML项目中,我希望显示图形效果,并且在动画期间,我希望禁用GUI的一部分 . 物品必须不知道它是如何精确使用的 . 我通过向我的组件添加目标属性来“冻结”并使用捕获事件的 MouseArea 填充此目标组件来实现此行为 . 到目前为止,我对这种行为完全满意,除了在运行时出现的一个小错误:

QML MouseArea: Cannot anchor to an item that isn't a parent or sibling.

这是MouseArea的代码(grid是我用来测试的id):

Item
{
    id: starterCircle
    property var freeze: grid

    MouseArea
    {
        id: inhibit
        parent: starterCircle.freeze.parent 
        anchors.fill: starterCircle.freeze // generates an error before re-parenting
    }
}

如果我将 MouseArea 更改为此,我不会被错误所困扰,但对我来说这看起来像是一个肮脏的黑客:

MouseArea
    {
        id: inhibit
        parent: starterCircle.freeze.parent 
        onParentChanged: if (starterCircle.freeze.parent === parent) anchors.fill = starterCircle.freeze
    }

我应该提一个奇怪的行为:如果我更改_2816800_的_2816800_的父属性,我会在日志中打印两次相同的父级,并且不再有错误 . 也就是说,以下代码没有错误:

MouseArea
    {
        id: inhibit
        parent: starterCircle.freeze.parent 
        anchors.fill: starterCircle.freeze
        onParentChanged: console.log(parent)
    }

请注意,我可能会遇到错误或黑客攻击,以防止生成错误 . 但我可能错过了一些东西,以使事情正确 . 我正在使用Qt 5.9.2 .

1 回答

  • 0

    最简单的方法是使用条件绑定:

    anchors.fill: (starterCircle.freeze.parent === parent 
                   ? starterCircle.freeze
                   : null)
    

相关问题