是否有Qt/QML函数来检查是否已单击形状?
我试图在一个形成六边形的QML形状中注册一个点击。 我知道有一个 Shape.FillContains() 我试图使用的财产。 但我不知道如何进一步,因为我之前刚刚与MouseAreas合作过是否有Qt/QML函数来检查是否已单击形状?,qt,qml,qt5,qqmlcomponent,Qt,Qml,Qt5,Qqmlcomponent,我试图在一个形成六边形的QML形状中注册一个点击。 我知道有一个 Shape.FillContains() 我试图使用的财产。 但我不知道如何进一步,因为我之前刚刚与MouseAreas合作过 import QtQuick 2.15 import QtQuick.Shapes 1.15 import QtQuick.Extras 1.4 Item { id: root property real srh //ScaleFactor Shape {
import QtQuick 2.15
import QtQuick.Shapes 1.15
import QtQuick.Extras 1.4
Item
{
id: root
property real srh //ScaleFactor
Shape
{
id: rootShape
width: srh * (6.5 - 0.5)
height: srh * 5.2
anchors.centerIn: parent
containsMode: Shape.FillContains
ShapePath
{
id: myHexagon
strokeWidth: 4
strokeColor: "white"
fillColor: "steelblue"
//Path
startX: 2 * srh;
startY: 0 * srh
PathLine { x: 5 * srh; y: 0 * srh }
PathLine { x: 6.5 * srh; y: 2.6 * srh }
PathLine { x: 5.0 * srh; y: 5.2 * srh }
PathLine { x: 2.0 * srh; y: 5.2 * srh }
PathLine { x: 0.5 * srh; y: 2.6 * srh }
PathLine { x: 2 * srh; y: 0 * srh }
}
}
有人知道怎么处理这个吗?类似onClicked()的处理程序会很好
谢谢您链接到的文档似乎已经指向了答案。您是否尝试过将
containsMode
与MouseArea
组合
Shape
{
id: shape
signal clicked()
containsMode: Shape.FillContains
MouseArea
{
anchors.fill: parent
onClicked:
{
if (shape.contains(Qt.point(mouseX, mouseY)))
{
shape.clicked();
}
}
}
}
正如关于
containsMode
的文档所述:
如果您添加了鼠标,并且仅当鼠标或接触点完全位于形状内部时才想做出反应,则此选项非常有用
您可以使用输入处理程序,例如,它们使用其父级的contains方法
Shape {
id: rootShape
width: srh * (6.5 - 0.5)
height: srh * 5.2
anchors.centerIn: parent
containsMode: Shape.FillContains
ShapePath {
id: myHexagon
strokeWidth: 4
strokeColor: "white"
fillColor: hoverHandler.hovered ? "gold" : "steelblue"
//Path
startX: 2 * srh;
startY: 0 * srh
PathLine { x: 5 * srh; y: 0 * srh }
PathLine { x: 6.5 * srh; y: 2.6 * srh }
PathLine { x: 5.0 * srh; y: 5.2 * srh }
PathLine { x: 2.0 * srh; y: 5.2 * srh }
PathLine { x: 0.5 * srh; y: 2.6 * srh }
PathLine { x: 2 * srh; y: 0 * srh }
}
HoverHandler {
id: hoverHandler
}
TapHandler {
onTapped: print("Hexagon clicked")
}
}
谢谢@GrecKo,我对containsMode有点困惑。你知道如何更改HoverHandler,以便我可以执行类似onTapped{…}的代码类似onHovered:{…}但我在刚刚取消()和grabChanged()的文档中找不到真正有用的东西。fillColor:hoverHandler.hovered?“gold”:“steelblue”相当不错,但我需要在hoveringThis:HoverHandler{id:myHover onHoveredChanged:{if(hovered){}else{}}