我尝试重构我创建的菜单。我的Menu
对象是MenuBar
组件的一部分。布尔属性被传递给 main.qml 文件,该文件将它们传递给cpp代码,该cpp代码随后又将它们传递给使用点(麻烦,对吗?)。我当前使用的代码在文件 MenuDistance.qml 中。
我想要实现的是在不改变菜单外观或性能的情况下自动进行信号处理。我试图通过创建 newMenu.qml 文件来解决我的问题。我设法将QList<Config>
传递到此文件,其中Config
是一个cpp类,具有3个成员-QString objectName
,QList<bool> objectXOn
和QList<QString> menuItemNames
。
我尝试使用Repeater
对象来遍历QList<Config>
对象,但是它不允许我创建Menu
对象-它允许我创建仅继承自{ {1}}。我本来想改用Item
,但是这样就不得不在菜单栏中为每个对象创建单独的标签,否则我就不会滚动好菜单(我不想每次都打开新窗口)我想更改设置)。此外,在我的Rectangle
对象中,不止这两个名称分别为 Distance 和 Angles 的QList<Config>
对象。我想遍历Config
对象中的所有对象,并根据 objectName 创建菜单。
有可能吗?我应该在哪里寻找答案?也许有人可以向我推荐一些网站/课程/教程/书,这些内容可以帮助我学习如何有效地使用qt和qml?
MenuRange.qml
QList<Config>
------------------------- 更新 -------------- ---------------
我创建了import QtQuick 2.7
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
Menu
{
id: root
property string checkedBox: "qrc:///images/icons/material/CheckedBox.svg"
property string uncheckedBox: "qrc:///images/icons/material/UncheckedBox.svg"
property bool angle30on: true
property bool angle15on: false
property bool angle5on: false
property bool range50kmOn: true
property bool range10kmOn: false
property bool range5kmOn: false
Menu {
id: distance
title: qsTr("Distance")
MenuItem {
id: range50km
text: qsTr("50 km")
icon.source: range50kmOn ? checkedBox : uncheckedBox
onClicked: {
range50kmOn = true
range10kmOn = false
range5kmOn = false
}
}
MenuItem {
id: range10km
text: qsTr("10 km")
icon.source: range10kmOn ? checkedBox : uncheckedBox
onClicked: {
range50kmOn = false
range10kmOn = true
range5kmOn = false
}
}
MenuItem {
id: range5km
text: qsTr("5 km")
icon.source: range5kmOn ? checkedBox : uncheckedBox
onClicked: {
range50kmOn = false
range10kmOn = false
range5kmOn = true
}
}
}
Menu {
id: angles
title: qsTr("Angles")
MenuItem {
id: angle30
text: qsTr("30\xB0")
icon.source: angle30on ? checkedBox : uncheckedBox
onClicked: {
angle30on = true
angle15on = false
angle5on = false
}
}
MenuItem {
id: angle15
text: qsTr("15\xB0")
icon.source: angle15on ? checkedBox : uncheckedBox
onClicked: {
angle30on = false
angle15on = true
angle5on = false
}
}
MenuItem {
id: angle5
text: qsTr("5\xB0")
icon.source: angle5on ? checkedBox : uncheckedBox
onClicked: {
angle30on = false
angle15on = false
angle5on = true
}
}
}
}
文件,该文件现在可以半自动创建菜单 。我必须手动创建NewMenuRange.qml
组件(我使用cpp中定义的Menu
函数从Config
文件的列表中选择main.qml
对象,但是它会创建Q_INVOKABLE
自动。我不知道该怎么办,是如何仅在MenuBarItem
的情况下更新图标源:
checkedBox
=== true和所有model.menuXOn[index]
=== false
NewMenuRange.qml
model.menuXOn[i>index]