看看这个QML片段:
import QtQuick 2.4
import QtQuick.Controls 2.4
Rectangle {
color: "blue"
width: 50
height: 50
CheckBox {
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
}
}
}我想在CheckBox上添加MouseArea,这样我就可以处理doubleclick。然而,无论我是如何做的,CheckBox都会停止工作(单击它不会显示选中的标记),只要它上面有MouseArea。
这里怎么了?
发布于 2022-01-24 16:35:34
您可以通过编程方式切换QtQuick2 CheckBox和AbstractButton.toggle()。此外,MouseArea propagateComposedEvents属性仅适用于其他MouseAreas,而不适用于Quick类型。
我不知道您的用例,所以我在下面添加了一些可能性。
信号连接()方法
通过MouseArea实现切换的最简单方法是通过将单击的MouseArea连接到单击的CheckBox来创建信号链。
Rectangle {
anchors.centerIn: parent
color: "blue"
width: 50
height: 50
CheckBox {
id: checkBox
onClicked: toggle()
MouseArea {
id: mouseArea
anchors.fill: parent
}
Component.onCompleted: mouseArea.clicked.connect(clicked)
}
}注意,双击总是以一次单击开始。如果您想用捕捉MouseArea的双击,您可以使用计时器来防止将单击传播到CheckBox。
Rectangle {
anchors.centerIn: parent
color: "blue"
width: 50
height: 50
CheckBox {
id: checkBox
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
if (timer.running) {
return
}
checkBox.toggle()
timer.start()
}
Timer {
id: timer
interval: 250
repeat: false
}
}
}
}如果您想支持复选框的按下可视化和/或如果您想使用比CheckBox大小更大的CheckBox,您可以查看这个问题的回答,不能单击MouseArea下面的按钮。
https://stackoverflow.com/questions/70826165
复制相似问题