Voglio implementare il seguente scenario in QML.Come includere gli eventi di passaggio del mouse del figlio nella MouseArea principale utilizzando QML?
Ecco un/delegato semplificata di esempio per ListView
elemento:
Component {
Item {
id: container
MouseArea {
anchors.fill: parent
hoverEnabled: true
onClicked: {
container.ListView.view.currentIndex = index
container.forceActiveFocus();
}
onEntered: {
actionList.state = "SHOW";
myItem.state = "HOVER"
}
onExited: {
actionList.state = "HIDE";
myItem.state = "NORMAL"
}
Rectangle {
id: myItem
color: "gray"
anchors.fill: parent
Row {
id: actionList
spacing: 5; anchors.fill: parent
Image {
id: helpAction
source: "" //Some image address
width: 16; height: 16; fillMode: Image.PreserveAspectFit
states: [
State {
name: "NORMAL"
PropertyChanges { target: helpAction; opacity: 0.7 }
},
State {
name: "HOVER"
PropertyChanges { target: helpAction; opacity: 1.0 }
}
]
MouseArea {
hoverEnabled: true
anchors.fill: parent
onEntered: {
parent.state = "HOVER";
}
onExited: {
parent.state = "NORMAL";
}
}
states: [
State {
name: "SHOW"
PropertyChanges { target: actionList; visible: false }
},
State {
name: "HIDE"
PropertyChanges { target: actionList; visible: true }
}
]
}
//Other action buttons...
states: [
// `NORMAL` and `HOVER` states definition here...
]
}
}
}
}
Ma ho un problema con MouseArea
.
interno MouseArea
(ActionButton) non funziona correttamente per entered
evento. Quando il mouse passa sul pulsante di azione, l'esterno MouseArea
genera l'evento exited
.
C'è qualche errore nel mio codice? Più in generale, come posso implementare un tale scenario in QML?
Non so perché! Puoi vedere che il mio codice di esempio ha usato questo modello, ma non funziona !! Tuttavia ora funziona con Qt5.2.0 :) Per altri utenti interessati, tieni semplicemente "MouseArea" interno all'interno di quello esterno. Controlla per 'hoverEnabled: true' e funzionerà. –
Non capisco completamente nessuna parte della risposta. Prima parte: intendevi? Se vuoi includere eventi di passaggio del mouse discendenti nell'antenato MouseArea, rendi bambino MouseArea un figlio diretto della madre MouseArea'? E se sì, come funziona il tuo secondo esempio, considerando che contiene solo * una * MouseArea? –
Avevo un caso d'uso in cui un 'CheckBox' era su una riga di un elenco, dove la riga dell'elenco si evidenziava al passaggio del mouse. Inizialmente ho avuto il 'CheckBox' e il' MouseArea' allo stesso livello, ma una volta che il 'CheckBox' è stato annidato all'interno di' MouseArea' e 'hoverEnabled: true' è stato applicato all''acclesso' MouseArea' questo ha permesso gli effetti al passaggio del mouse per 'CheckBox', questa risposta funziona con Qt5.9. – Kasheen