Qt 如何正确清除QML菜单

Qt 如何正确清除QML菜单,qt,qml,qtquick2,Qt,Qml,Qtquick2,我有一个动态菜单。下面的代码只是为了理解层次结构 Menu { id: mainMenu MenuItem { text: "item" } Menu { title: "submenu" MenuItem { text: "submenuitem" } } } 现在我需要删除所有主菜单的内容。正如我在文档中看到的,菜单有方法removietem,takeItem和ta

我有一个动态菜单。下面的代码只是为了理解层次结构

Menu {
    id: mainMenu
    MenuItem {
       text: "item"
    }
    Menu {
       title: "submenu"
       MenuItem {
           text: "submenuitem"
        }
    }   
}

现在我需要删除所有主菜单的内容。正如我在文档中看到的,菜单有方法
removietem
takeItem
takeMenu
。使用
takeMenu
count
属性,我可以访问菜单的子项并递归删除它们。但是如果我不知道菜单项的顺序和类型呢<代码>项没有属性
计数
。我需要一些通用的解决方案,可以删除项目本身,如果它是一个菜单,则删除它的所有子项。

我不知道它是否是最干净的解决方案,但它可以很好地清除您的示例

while(mainMenu.items.length > 0)
    mainMenu.removeItem(mainMenu.items[0]);

您不需要递归执行,因为当您删除一个项目时,它的所有内容都会随之删除。

您是否查看了菜单中的实例化器以动态创建菜单?是的。菜单是使用自定义实例化器创建的。因此,我不清楚如何从qml中删除它的子项,而不是从c++中删除。文档的简短示例展示了它是如何工作的。这是一个您要填充的模型,所以您只需要清除模型,实例化器就可以处理它了。删除对象:recentFilesMenu.removietem(object)是的,这很有效。您能在文档中告诉我,当父项删除时,子项将被删除吗?问题是调用函数后,我们仍然可以通过子菜单的ID访问子菜单的子项…QtQuick 2.0中的菜单没有
属性。但是如果我们调用
main menu.removietem(0)
它会工作!