QML中ApplicationWindow的MenuBar中动态添加Menu

Log*_*h G 5 qt qml

我正在尝试创建一个可使用插件扩展的应用程序。现在插件应该能够在 MenuBar 中动态添加一个 Menu。

从文档中,我可以找到 QtLabsPlatform 提供的 MenuBar。这有一个方法 addMenu。但是 Windows 不在支持的平台列表中。所以我不能从中受益。

我尝试了Error added a Menu in QML 中建议的占位符技术,但这不适用于 QtQuick.Controls 2.13

eyl*_*esc 4

在您指出的问题的@timday 答案中指示了答案,但没有显示示例:

... 动态创建菜单有点困难;请参阅 Qt.createQmlObject 或 Qt.createComponent 文档。(在代码中声明您需要的所有属性可能会更简单,但将它们的可见属性连接到任何适当的逻辑)。...

(强调我的)

所以我的答案只是向您展示如何做到这一点,尽管我认为您想动态地将 MenuItem 添加到菜单,而不是将菜单添加到菜单栏:

import QtQuick 2.13
import QtQuick.Controls 2.13


ApplicationWindow {
    id: root
    width: 640
    height: 480
    visible: true
    menuBar: MenuBar {
        Menu {
            id: plugins_menu
            title: qsTr("&Plugins")   
        }
    }
    function onTriggered(item){
        console.log(item.text)
    }
    Component.onCompleted:{
        var plugin_names = ["plugin1", "plugin2", "plugin3"]
        for(var i in plugin_names){
            var item = Qt.createQmlObject('import QtQuick 2.13; import QtQuick.Controls 2.13; MenuItem {}',
                                       plugins_menu)
            item.text = plugin_names[i]
            plugins_menu.addItem(item)
            var f = function(it){ 
                it.triggered.connect(function (){ root.onTriggered(it)
            })}
            f(item)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)