2012-06-20 2 views
3

У меня есть CoolButton, которые имеют pressed состояние:Поддерживает ли управление наложением QML и переопределение?

// 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 { ... } 
    } 
} 

ответ

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