在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
}
我应该提一个奇怪的行为:如果我更改MouseArea
的{{1}}的父属性,我会在日志中打印两次相同的父级,并且不再有错误。也就是说,以下代码没有错误:
parent
请注意,我可能会遇到错误或黑客攻击,以防止生成错误。但我可能错过了一些东西,以使事情正确。我正在使用Qt 5.9.2。
答案 0 :(得分:0)
最简单的方法是使用条件绑定:
anchors.fill: (starterCircle.freeze.parent === parent
? starterCircle.freeze
: null)