我正在尝试创建一个可使用插件扩展的应用程序。现在插件应该能够在 MenuBar 中动态添加一个 Menu。
从文档中,我可以找到 QtLabsPlatform 提供的 MenuBar。这有一个方法 addMenu。但是 Windows 不在支持的平台列表中。所以我不能从中受益。
我尝试了Error added a Menu in QML 中建议的占位符技术,但这不适用于 QtQuick.Controls 2.13
在您指出的问题的@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)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |