Qt (QML Calendar示例)当将自定义鼠标ea添加到委托';s矩形

Qt (QML Calendar示例)当将自定义鼠标ea添加到委托';s矩形,qt,qml,qtquick2,Qt,Qml,Qtquick2,我试图理解QtQuick/Calendar示例的内部工作原理。 可在此处找到: 实际代码如下所示: 在dayDelegate中,它具有如下定义的矩形: dayDelegate: Item { Rectangle { anchors.fill: parent border.color: "transparent"

我试图理解QtQuick/Calendar示例的内部工作原理。 可在此处找到:

实际代码如下所示:

在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"

                                }
                            }
但一旦我这样做了,日历就不再对当前所选项目之外的点击做出反应添加此鼠标earea会破坏什么?

更让人困惑的是,如果我将这个区域添加到一个矩形中,该矩形是代理矩形的子对象,并以不可见的方式重叠它,则所有内容都可以按我所希望的那样工作,并且我可以在代理内操作并更改选择

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"
                                    }
                                }
                        }
                    }

它有助于可视化您添加的
MouseArea

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Rectangle {
    width: 300
    height: 300

    Calendar {
        id: calendar
        anchors.centerIn: parent
        style: CalendarStyle {
            dayDelegate: Item {
                Rectangle {
                    id: rect
                    anchors.fill: parent

                    Label {
                        id: dayDelegateText
                        text: styleData.date.getDate()
                        anchors.centerIn: parent
                        horizontalAlignment: Text.AlignRight
                        font.pixelSize: Math.min(parent.height/3, parent.width/3)
                        color: styleData.selected ? "red" : "black"
                        font.bold: styleData.selected
                    }
                    MouseArea {
                        anchors.fill: parent
                        Rectangle {
                            anchors.fill: parent
                            color: "transparent"
                            border.color: "darkorange"
                        }
                    }
                }
            }
        }
    }
}

由于每个代理中都有一个
MouseArea
Calendar
的鼠标区域(一个覆盖所有代理的区域)无法获取
MouseArea
所占据区域的任何鼠标事件

您的第三个代码段之所以有效,是因为您只占用了每个代理的一半面积,而且只有在选择了特定的一天时:

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Rectangle {
    width: 300
    height: 300

    Calendar {
        id: calendar
        anchors.centerIn: parent
        style: CalendarStyle {
            dayDelegate: Item {
                Rectangle {
                    id: rect
                    anchors.fill: parent

                    Label {
                        id: dayDelegateText
                        text: styleData.date.getDate()
                        anchors.centerIn: parent
                        horizontalAlignment: Text.AlignRight
                        font.pixelSize: Math.min(parent.height/3, parent.width/3)
                        color: styleData.selected ? "red" : "black"
                        font.bold: styleData.selected
                    }
                    MouseArea {
                        anchors.horizontalCenter: parent.horizontalCenter
                        anchors.verticalCenter: parent.verticalCenter
                        width: styleData.selected ? parent.width / 2 : 0
                        height: styleData.selected ? parent.height / 2 : 0
                        Rectangle {
                            anchors.fill: parent
                            color: "transparent"
                            border.color: "darkorange"
                        }
                    }
                }
            }
        }
    }
}


然而,很难提出一种方法来实现你的目标,因为你还没有告诉我们你想做什么。

你能提供日历示例的链接吗?有效问题:)我编辑了原始帖子以包含你是对的链接。我才刚开始学习qml,所以我忽略了这一点,我实际上是在模糊日历的鼠标输入区域:)谢谢。