ReferenceError:未定义volumeControl

时间:2016-04-18 18:44:27

标签: qt qml

我有一种情况,VolumeControl.qml应该接收从Page1派生的页面(如Page2)和派生自Page2的页面(如Page3)收到的所有密钥。

当我尝试将密钥从所有页面转发到VolumeControl(通过id volumeControl)时,我只能从Page1转发,但在尝试访问音量控制ID时,在Page2和Page3中获得引用错误。

为什么我在Page2和Page3中收到引用错误?在页面使用密钥(event.accepted)之前,如何解决此问题以将密钥从所有单个页面转发到音量控制?

另外为什么我没有在Page1中收到引用错误?

VolumeControl.qml

import QtQuick 2.4

FocusScope 
{
    id: volumeControl
    focus: true  
    Keys.onPressed: 
    {
        console.error("VOLUME CTRL Key received" + event.key);
    }
}

Page1.qml

import QtQuick 2.4

Item 
{
    id: p1

    Keys.forwardTo: [volumeCtrl]

    VolumeControl 
    {
        id: volumeCtrl
        visible: true
        z: 60
    }
}

Page2.qml

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) 
    {

    }
}

Page3.qml

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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果我已正确理解您的问题,您应该为 Page1 项添加alias property。您在 Page2 Page3 中收到引用错误,因为volumeCtrl属性或对它的引用在这些项目中不存在。

  1. 添加到 Page1.qml:

    中的根项目
    property alias volumeCtrlAlias1: volumeCtrl
    

    现在 Page1 项目将具有 VolumeControl 项目的参考属性。

  2. 然后在 Page2.qml 中更改此内容:

    Keys.forwardTo: [volumeCtrl]
    

    为:

    Keys.forwardTo: [volumeCtrlAlias1]
    
  3. 最后在您的 Page3.qml 中更改相同的字符串 到

    Keys.forwardTo: [p3.volumeCtrlAlias1]
    
  4. 有关Qt文档here中别名的信息。