Qt (QML Calendar示例)当将自定义鼠标ea添加到委托';s矩形
我试图理解QtQuick/Calendar示例的内部工作原理。 可在此处找到: 实际代码如下所示: 在dayDelegate中,它具有如下定义的矩形:Qt (QML Calendar示例)当将自定义鼠标ea添加到委托';s矩形,qt,qml,qtquick2,Qt,Qml,Qtquick2,我试图理解QtQuick/Calendar示例的内部工作原理。 可在此处找到: 实际代码如下所示: 在dayDelegate中,它具有如下定义的矩形: dayDelegate: Item { Rectangle { anchors.fill: parent border.color: "transparent"
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,所以我忽略了这一点,我实际上是在模糊日历的鼠标输入区域:)谢谢。