Qt 如何处理子菜单的onClick或onTriggered事件?

Qt 如何处理子菜单的onClick或onTriggered事件?,qt,qml,qt5,qtquick2,qtquickcontrols2,Qt,Qml,Qt5,Qtquick2,Qtquickcontrols2,我有一个对象的层次结构,我想通过菜单选择对象。菜单表示子菜单的相应层次结构。但若对象有子对象,那个么相应的菜单项就不能捕捉鼠标单击事件。见下面的代码: import QtQuick 2.13 import QtQuick.Window 2.13 import QtQuick.Controls 2.13 Window { visible: true width: 640 height: 480 Menu { id: contextMenu

我有一个对象的层次结构,我想通过菜单选择对象。菜单表示子菜单的相应层次结构。但若对象有子对象,那个么相应的菜单项就不能捕捉鼠标单击事件。见下面的代码:

import QtQuick 2.13
import QtQuick.Window 2.13
import QtQuick.Controls 2.13

Window {
    visible: true
    width: 640
    height: 480

    Menu {
        id: contextMenu
        MenuItem {
            text: "Object1"
            onTriggered: console.log(text + " selected")
        }
        Menu {
            title: "Object2"
            onTriggered: console.log(title + " selected")  // Error!!! Non-existent property "onTriggered"!
            MenuItem {
                text: "SubObject1"
                onTriggered: console.log(text + " selected")
            }
            MenuItem {
                text: "SubObject2"
                onTriggered: console.log(text + " selected")
            }
        }
        MenuItem {
            text: "Object3"
            onTriggered: console.log(text + " selected")
        }
    }

    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.RightButton
        onClicked: {
            if (mouse.button === Qt.RightButton)
                contextMenu.popup()
        }
    }
}
类菜单没有触发的
或单击的
信号。另一种变体是将MenuItem添加到其他MenuItem:

        MenuItem {
            text: "Object2"
            onTriggered: console.log(text + " selected")
            MenuItem {
                text: "SubObject1"
                onTriggered: console.log(text + " selected")
            }
            MenuItem {
                text: "SubObject2"
                onTriggered: console.log(text + " selected")
            }
        }
在这种情况下,程序运行,但菜单看起来很奇怪:它没有子菜单,所有菜单项位于同一位置:


可以在包含子菜单的菜单项上处理鼠标单击吗?

菜单没有文本属性。让我们尝试将日志消息更改为使用title属性。这可能会损坏所有子组件

更新;
这个信号存在吗?目的是什么。菜单是上面屏幕截图上填充项目的矩形,即我们只能触发/单击项目。

这对我来说没有意义-你应该通过菜单项处理子菜单项的鼠标单击,你已经在这样做了。有什么问题吗?“如果我将MenuItem添加到其他MenuItem中,QML将无法正确显示它们。”我无法用您的示例重现此内容。我已更改了问题的措辞。问题是:如果您将鼠标悬停在菜单项上,子菜单将打开,而如果您单击包含子菜单的菜单项,则不会发生任何事情。所以我想处理鼠标点击并用它来选择相应的对象。@AndreyEpifantsev为什么要得到一个有菜单项的菜单的点击/触发?我这样问是因为设计时,开发人员感兴趣的是单击菜单项而不是菜单项。例如,在您的例子中,我对单击子对象1感兴趣,但对Object2不感兴趣。因为我有Object2,我希望用户能够选择它。对象是表单层次结构。例如,在QML中,可以将一个矩形放在另一个矩形内。第一个矩形成为第二个矩形的子矩形。但它们仍然是单独的对象,在QML vusual编辑器中,您可以单独选择它们。您的原始示例对我来说很好。我建议发布一个完整的示例来演示这个问题。完整的错误消息:qrc:/main.qml:18无法分配给不存在的属性“onTriggered”