qt - 如何处理子菜单的 onClick 或 onTriggered 事件?
问题描述
我有一个对象层次结构,我想通过菜单选择对象。Menu 表示相应的子菜单层次结构。但是如果对象有子对象,则相应的菜单项无法捕获鼠标单击事件。请参见下面的代码:
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()
}
}
}
Class Menu 没有triggered
或没有clicked
信号。另一种变体是将 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")
}
}
在这种情况下,程序运行但菜单看起来很奇怪:它没有子菜单,并且所有 sumenu 项目都位于同一个位置:
是否可以处理鼠标单击包含子菜单的菜单项?
解决方案
菜单没有文本属性。让我们尝试将日志消息更改为使用 title 属性。这可能会破坏所有子组件。
更新; 存在这个信号吗?目的是什么。菜单是上面屏幕截图中填充项目的矩形,即我们只能触发/单击项目。
推荐阅读
- android - 使用 SNPE 实现 mobilenetssd
- visual-studio-code - Visual Studio 代码 - 巨大的代码片段
- javascript - ExtJS listConfig 在项目选择器中不起作用
- getorgchart - 如何在 getorgchart 中设置拖放?
- ios - IOS - 如何以编程方式阻止从另一个应用程序打开一个应用程序?
- sql - 使用偏移量 SQL Server 2008 获取本地日期时间
- python - 带括号的多行代码第二行的正确缩进
- azure-api-management - Azure API 管理日期转换
- .net - 传递 ADAL 令牌以向 CRM Online 进行身份验证 - Web 应用程序
- docker - Docker Alpine 无法为 scipy 构建轮子