在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 回答
最简单的方法是使用条件绑定: