Tôi muốn triển khai kịch bản sau đây trong QML.Làm thế nào để bao gồm các sự kiện di chuột con trong MouseArea cha mẹ bằng cách sử dụng QML?
Đây là một mẫu/đơn giản hóa đại biểu cho ListView
yếu tố:
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...
]
}
}
}
}
Nhưng tôi có một vấn đề với MouseArea
.
Bên trong MouseArea
(nút hành động) không hoạt động bình thường cho sự kiện entered
. Khi chuột vào nút hành động, bên ngoài MouseArea
cháy exited
sự kiện.
Có lỗi trong mã của tôi không? Nói chung, làm thế nào tôi có thể thực hiện một kịch bản như vậy trong QML?
Tôi không chắc chắn tại sao! Bạn có thể thấy rằng mã mẫu của tôi đã sử dụng mẫu này, nhưng không hoạt động !! Tuy nhiên nó hoạt động ngay bây giờ bằng cách sử dụng Qt5.2.0 :) Đối với người dùng quan tâm khác, chỉ cần giữ bên trong 'MouseArea' bên trong một bên ngoài. Kiểm tra kỹ cho 'hoverEnabled: true' và nó sẽ hoạt động. –
Tôi không hiểu một phần câu trả lời đầy đủ. Phần đầu tiên: ý của bạn là gì? Nếu bạn muốn bao gồm các sự kiện di chuột con chuột trong tổ tiên MouseArea của bạn, làm cho bạn con MouseArea là một con trực tiếp của cha mẹ MouseArea'? Và nếu vậy, ví dụ thứ hai của bạn hoạt động như thế nào, xem xét nó chỉ chứa * một * MouseArea? –
Tôi đã có một trường hợp sử dụng mà một 'CheckBox' là trên một hàng của một danh sách, nơi hàng danh sách sẽ nổi bật trên di chuột. Lúc đầu, tôi có 'CheckBox' và' MouseArea' ở cùng một mức, nhưng khi 'CheckBox' được lồng trong' MouseArea' và 'hoverEnabled: true' được áp dụng cho' MouseArea' kèm theo, điều này cho phép các hiệu ứng di chuột cho 'CheckBox', câu trả lời này hoạt động với Qt5.9. – Kasheen