Динамически добавлять меню в MenuBar ApplicationWindow в QML - PullRequest
2 голосов
/ 02 октября 2019

Я пытаюсь создать приложение, расширяемое с помощью плагинов. Теперь плагины должны иметь возможность динамически добавлять меню в панели меню.

Из документации я могу найти MenuBar, предоставленный QtLabsPlatform. У этого есть метод addMenu. Но Windows не было в списке поддерживаемых платформ. Поэтому я не могу извлечь из этого пользу.

Я попробовал метод заполнителя, предложенный в Ошибка добавления меню в QML , но это не работает с QtQuick.Controls 2.13

1 Ответ

1 голос
/ 03 октября 2019

В ответ @timday в указанном вами вопросе указывает ответ, но не показывает пример:

... Динамическое создание меню - этонемного сложнее;см. Qt.createQmlObject или Qt.createComponent docs . (Может быть проще просто объявить все, что вам нужно в вашем коде, но с их видимым свойством, привязанным к любой подходящей логике). ...

(выделение мое)

Поэтому мой ответ - просто показать вам, как это сделать, хотя я думаю, что вы хотите добавить 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)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...