是否有Qt/QML函数来检查是否已单击形状?

是否有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 {

我试图在一个形成六边形的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
    {
        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{}}