我有一个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 { ... }
    }
}

最佳答案

我对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 { ... }
    }
}

07-28 01:31
查看更多