QML是否支持状态继承&重写?

时间:2012-06-20 01:47:14

标签: qt4 qml

我的CoolButton状态为pressed

// CoolButton.qml:
BorderImage {
    ...
    states: State {
        name: "pressed"
        when: mouseArea.pressed == true
        PropertyChanges { target: shade; opacity: 0.5 }
    }
}

MenuButton延伸CoolButton

// MenuButton.qml:
CoolButton {
    ...
    states: State {
        name: "pressed"
        PropertyChanges { ... }
    }
}

但是,pressed中定义的MenuButton状态似乎根本不起作用。它是否被pressed中定义的CoolButton状态隐藏了?我该如何覆盖呢?

应该是这样的吗?

// MenuButton.qml:
CoolButton {
    ...
    states: State {
        name: "pressed"
        extend: "CoolButton.pressed"
        PropertyChanges { ... }
    }
}

1 个答案:

答案 0 :(得分:2)

我是QML的新手,但据我所知,你无法扩展或覆盖已定义的组件。 相反,你可以封装它们,如下所示:

// CoolButton.qml:
BorderImage {
    ...
    states: State {
        name: "pressed"
        when: mouseArea.pressed == true
        PropertyChanges { target: shade; opacity: 0.5 }
    }
}

和封装可能如下所示:

// MenuButton.qml:
CoolButton {
    property alias cb: encapsulatedCB
    CoolButton {id: encapsulatedCB; }
    ...

    states: State {
        name: "pressed"
        PropertyChanges { ... }
    }
}