我有一种情况,VolumeControl.qml应该接收从Page1派生的页面(如Page2)和派生自Page2的页面(如Page3)收到的所有密钥。
当我尝试将密钥从所有页面转发到VolumeControl(通过id volumeControl)时,我只能从Page1转发,但在尝试访问音量控制ID时,在Page2和Page3中获得引用错误。
为什么我在Page2和Page3中收到引用错误?在页面使用密钥(event.accepted)之前,如何解决此问题以将密钥从所有单个页面转发到音量控制?
另外为什么我没有在Page1中收到引用错误?
import QtQuick 2.4
FocusScope
{
id: volumeControl
focus: true
Keys.onPressed:
{
console.error("VOLUME CTRL Key received" + event.key);
}
}
import QtQuick 2.4
Item
{
id: p1
Keys.forwardTo: [volumeCtrl]
VolumeControl
{
id: volumeCtrl
visible: true
z: 60
}
}
import QtQuick 2.4
Page1
{
id: p2
Keys.forwardTo: [volumeCtrl]
Keys.onDigit0Pressed: handleDigit("0")
Keys.onDigit1Pressed: handleDigit("1")
Keys.onDigit2Pressed: handleDigit("2")
Keys.onDigit3Pressed: handleDigit("3")
Keys.onDigit4Pressed: handleDigit("4")
Keys.onDigit5Pressed: handleDigit("5")
Keys.onDigit6Pressed: handleDigit("6")
Keys.onDigit7Pressed: handleDigit("7")
Keys.onDigit8Pressed: handleDigit("8")
Keys.onDigit9Pressed: handleDigit("9")
function handleDigit(digit)
{
}
}
import QtQuick 2.4
Page2
{
id: p3
Rectangle
{
width: 360
height: 360
focus:true
Keys.forwardTo: [volumeCtrl]
Keys.onPressed:
{
console.error("page3 Key received" + event.key);
}
}
}
答案 0 :(得分:1)
如果我已正确理解您的问题,您应该为 Page1 项添加alias property
。您在 Page2 和 Page3 中收到引用错误,因为volumeCtrl
属性或对它的引用在这些项目中不存在。
添加到 Page1.qml:
中的根项目property alias volumeCtrlAlias1: volumeCtrl
现在 Page1 项目将具有 VolumeControl 项目的参考属性。
然后在 Page2.qml 中更改此内容:
Keys.forwardTo: [volumeCtrl]
为:
Keys.forwardTo: [volumeCtrlAlias1]
最后在您的 Page3.qml 中更改相同的字符串 到
Keys.forwardTo: [p3.volumeCtrlAlias1]
有关Qt文档here中别名的信息。