Я пытаюсь понять внутреннюю работу примера QtQuick/Calendar. можно найти здесь:(Пример календаря QML) Календарь теряет способность изменять выбор, когда пользовательский MouseArea добавляется в прямоугольник делегата
https://qt-project.org/doc/qt-5/qtquickcontrols-calendar-example.html
и фактический код находится в:
https://qt-project.org/doc/qt-5/qtquickcontrols-calendar-qml-main-qml.html
В своей dayDelegate имеет прямоугольник, который определяется следующим образом:
dayDelegate: Item {
Rectangle {
anchors.fill: parent
border.color: "transparent"
color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent"
anchors.margins: styleData.selected ? -1 : 0
}
Я пытаюсь добавить возможность выполнять пользовательскую обработку в зависимости от того, где внутри пользователя делегата щелчки. Я не изменить делегат выглядеть следующим образом:
dayDelegate: Item {
Rectangle {
anchors.fill: parent
border.color: "transparent"
color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent"
anchors.margins: styleData.selected ? -1 : 0
MouseArea {
anchors.fill: parent
onClicked:
{
dayDelegateText.text = dayDelegateText.text == "two" ? "one" : "two"
}
}
Но как только я это сделать, календарь больше не реагирует на клики за пределами выбранного пункта. Что я сломаю, добавив эту MouseArea?
Еще более запутанным является то, что если я добавлю эту область внутри прямоугольника, который является дочерним элементом прямоугольника делегата и невидимо перекрывается, все работает так, как я этого хотел, и я могу работать внутри делегата и изменять выбор.
dayDelegate: Item {
Rectangle {
anchors.fill: parent
border.color: "transparent"
color: styleData.date !== undefined && styleData.selected ? selectedDateColor : "transparent"
anchors.margins: styleData.selected ? -1 : 0
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
width: styleData.selected ? parent.width/2 : 0
height:styleData.selected ? parent.height/2 : 0
color: "gray"
MouseArea {
anchors.fill: parent
onClicked:
{
dayDelegateText.text = dayDelegateText.text == "two" ? "one" : "two"
}
}
}
}
Не могли бы вы предоставить ссылку на пример календаря? –
Действительный вопрос :) Я отредактировал оригинал сообщения, чтобы включить ссылку – Zeks